微信支付 v 3.3.6
文字说明;
前提:注册、申请服务号,开通微信支付。
涉及到的参数:AppId、AppSecret、原始ID(自动回复)、mch_id(商户号)、Key(商户密钥:自己设定。)
统一规范:
- 要求
认证方式:HTTPS 认证,退款和冲正接口调用需要商户证书(证书在审核邮件附件中)。
- 请求采用POST 方式。
- 提交和返回结果采用XML格式。
- 字符集默认使用UTF-8,请勿使用其它字符集。
- 商户与微信之间的交互(特别是Native 回调和支付通知回调),都需要验证签名。
- 处理返回时先判断协议返回错误码,再判断业务返回错误码,最后判断交易状态。
- 统一加密方式:MD5。
- 统一签名生成方式:
- 传入参数按字段名ascii码从小到大排序,使用url键值对的格式(key1=value1&key2=value2...)拼接成字符串(注:值为空的参数不参与签名)。在字符串最后再拼接上&key=Key(商户密钥),然后进行MD5加密处理,最后得到的字符串转换为大写。
微信支付:
- jsapi支付和native支付都需要调用统一支付接口(URL 地址:https://api.mch.weixin.qq.com/pay/unifiedorder)
- jsapi支付
- jsapi 调用统一支付接口需要参数openid(通过Oath2.0授权获取)。
- 统一支付接口返回参数需要先验证签名,然后获取prepay_id。
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { //公众号支付
jQuery('#wxPay').click(function(e){ WeixinJSBridge.invoke('getBrandWCPayRequest',{
"appId" : appId, //公众号名称,由商户传入
"timeStamp" : timeStamp, //时间戳
"nonceStr" : nonceStr, //随机串
"package" : package, //格式:prepay_id=xxxx
"signType" : signType, //签名方式:MD5
"paySign" : paySign //签名:生成签名参数appId、timeStamp、nonceStr、package、signType、key 注意参数名大小写。
},function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
window.location.href=url; //支付成功后跳转到的页面用于展示
}
// else {
// alert(res.err_code+res.err_desc+res.err_msg);
// }
}); }); }, false)
- 注:jsapi页面点击了两次“微信支付”,生成了两笔订单,需要在页面微信支付按钮上增加防二次点击的机制。
- native支付
- 参数product_id必须的
- 调用统一支付接口获取code_url,并生成二维码图片。
微信支付回调notify_url:
获取xml格式参数,验证签名,处理逻辑(通知后台会多次回调,先检查是否处理过,在执行)。
代码区:
- 生成Sign公共方法:
public string CreateSign(Dictionary<string, string> collection)
{
//排序
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(collection);
list.Sort(delegate(KeyValuePair<string, string> pair1, KeyValuePair<string, string> pair2)
{
return pair1.Key.CompareTo(pair2.Key);
}); StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> pair in list)
{
sb.Append(pair.Key);
sb.Append("=");
sb.Append(pair.Value);
sb.Append("&");
}
string str = sb.Append("key=value").ToString();
string signValue = MD5(str).ToUpper(); //md5加密并转换成大写
return signValue ;
}
- xml 和 Dictionary 转换方法:
public string DictionaryToXml(Dictionary<string, string> collection)
{
StringBuilder sb = new StringBuilder();
sb.Append("<xml>");
foreach (KeyValuePair<string, string> pair in collection)
{
sb.Append("<" + pair.Key + ">");
sb.Append("<![CDATA[" + pair.Value + "]]>");
sb.Append("</" + pair.Key + ">");
}
sb.Append("</xml>");
return sb.ToString();
} public Dictionary<string, string> XmlToDictionary(XmlDocument doc)
{
Dictionary<string, string> collection = new Dictionary<string, string>();
foreach (XmlElement element in doc.DocumentElement.ChildNodes)
{
string key = element.Name;
string value = element.InnerText;
if (value != "")
{
collection.Add(key, value);
}
}
return collection;
}
- 获取Json某一key值:
public string GetJosnValue(string jsonStr, string key)
{
string result = string.Empty;
if (!string.IsNullOrEmpty(jsonStr))
{
key = "\"" + key.Trim('"') + "\"";
int index = jsonStr.IndexOf(key) + key.Length + ;
if (index > key.Length + )
{
//先截逗号,若是最后一个,截“}”号,取最小值 int end = jsonStr.IndexOf(',', index);
if (end == -)
{
end = jsonStr.IndexOf('}', index);
}
//index = json.IndexOf('"', index + key.Length + 1) + 1;
result = jsonStr.Substring(index, end - index);
//过滤引号或空格
result = result.Trim(new char[] { '"', ' ', '\'' });
}
}
return result;
}
微信支付 v 3.3.6的更多相关文章
- Android—基于微信开放平台v3SDK,开发微信支付填坑。
接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...
- ***CodeIgniter集成微信支付(转)
微信支付Native扫码支付模式二之CodeIgniter集成篇 http://www.cnblogs.com/24la/p/wxpay-native-qrcode-codeigniter.html ...
- ****基于H5的微信支付开发详解[转]
这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...
- 到处都是坑的微信支付V3
业务需要一个在微信上能付款的功能,于是乎想到了最普遍的支付宝,坑爹的是T与A是水火不容啊,默默的还是接微信支付吧,没想到从此掉进了连环坑…… 网上写微信支付接口的还是很多,PHP官方有(鄙视源码作者, ...
- NET微信公众号开发-5.0微信支付(待测试)
开发前准备. 1.0微信支付官方开发者文档 2.0官方demo下载 我们用c#所以选择.net版本 不过这个官方的demo根本跑步起来 3.0官方demo运行起来解决方案 4.0微信支付官方.net版 ...
- 微信支付Native扫码支付模式二之CodeIgniter集成篇
CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/ ...
- 微信支付JSAPI模式及退款CodeIgniter集成篇
微信支付接口文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 首先你得知道这个jsapi是不能离开微信进行调用支付的,明白 ...
- android微信支付总结+自己搭建服务器
1.前期注册操作 1-1:微信开发平台:https://open.weixin.qq.com/ 1-2:创建移动应用 签名获取: 1.将自己的apk签名打包,运行到手机上. 2.将微信支付的签名工具, ...
- (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class ...
随机推荐
- aix Mysql-Rpm puppet puppetAgent
http://www.bullfreeware.com/toolbox.php (Large Open Source Software Archieve for AIX 提供MySQL5.1 fo ...
- Android应用中使用百度地图API定位自己的位置(二)
官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发人员们提供了例如以下类型的地图覆盖物: ...
- UVA - 10098 - Generating Fast (枚举排列)
思路:生成全排列,用next_permutation.注意生成之前先对那个字符数组排序. AC代码: #include <cstdio> #include <cstring> ...
- Android开发之自定义Spinner样式的效果实现(源代码实现)
android系统自带的Spinner样式是远远满足不了我们实际开发过程中对Spinner UI风格的要求,因此我们肯定需要为了切合整个应用的风格,修改我们的Spinner样式.系统给我们提供了两种常 ...
- HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS)
HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS) http://acm.hdu.edu.cn/showproblem.php?pi ...
- 为SharePoint 2010中的FBA创建自定义登录页面
SharePoint 2010中默认的FBA登录页面非常简单,只提供了一个Asp.Net的Login控件,让用户输入用户名和密码.在大多数情况下,我们需要定制这个页面以满足一些安全需求,比如为登录页面 ...
- JAVA-反射-getGenericSuperclass()
1 public class Person<T> { 2 3 } 4 5 import java.lang.reflect.ParameterizedType; 6 import java ...
- 怎样在超级终端和PC之间通过串口传输文件
Windows环境下,通过SecureCRT软件,用串口向ARM开发板发送文件: 输入命令 rz,可以看到如下图所示: 选择路径点击上传即可. 如果是想从Arm开发板中把文件Down下来,则可以按照下 ...
- skynet初学
记录下命令 git clone https://github.com/cloudwu/skynet.git sudo apt-get install autoconf sudo apt-get ins ...
- visual studio 配置OpenGL环境
首先在网上下载一个GLUT工具包. glut.zip,大约一百多kb. 解压之后得到这么几个文件: 将glut.h复制到C:\Program Files (x86)\Microsoft Visual ...