PC端网站集成微信支付的关键代码
2015-03-14 15:02
204 查看
目前来看,PC段实现微信支付,需要生成二维码,然后用微信扫码支付。
微信支付官网DEMO没有ASP.NET的,只能自己从帮助文档里扣代码摸索。这里需要说明几点特别要注意的。
看了下微信官网的文档,总结支付方式应该是两种:
1、Navite 静态链接方式。
2、JSAPI 方式。这种应该是手机端用到的。只支持微信内置浏览器。
我使用的是第一种方式。
但是据文档描述,这种方式还分为两种。请求流程不同,如下:
1、发送支付请求到微信 -> 微信返回支付Prepay_ID -> 发送支付信息到微信 -> 返回支付URL -> 生成二维码 -> 支付
2、发送支付信息到微信 -> 返回支付URL -> 生成二维码 -> 支付
网上有不少例子是使用第一种方式,但是我试了好几次都没成功。第二种方式非常简单,返回的支付URL业很短。最后使用了这种方式。
与支付宝不同的是,微信用POST提交方式,且需要提交XML,如下:
生成签名的方式跟支付宝一样,这里略过了。
还有一点需要特别注意的是参数问题。微信一共给了4个参数
APPID、MCH_ID、APPSECRET和KEY。
这里需要特别注意。生成签名用的是APPID、MCH_ID和KEY。刚开始,管理微信的人给了APPSECRET,跟KEY一样都是32位的,怎么也提示签名错误。后来揍了他一顿,又扣出来个KEY,一次成功!!!浪费了两天时间。
还有生成签名时需要注意。生成签名的字符串不要进行任务转码。
如果生成签名的参数正确的话,还是报错,可通过 http://mch.weixin.qq.com/wiki/tools/signverify/ 验证下,以查找自己代码的问题。
最后还是附上添加参数的代码:
这里需要注意,微信支付的金额单位是分。
生成二维码用了Gma.QrCodeNet.Encoding.dll
微信支付官网DEMO没有ASP.NET的,只能自己从帮助文档里扣代码摸索。这里需要说明几点特别要注意的。
看了下微信官网的文档,总结支付方式应该是两种:
1、Navite 静态链接方式。
2、JSAPI 方式。这种应该是手机端用到的。只支持微信内置浏览器。
我使用的是第一种方式。
但是据文档描述,这种方式还分为两种。请求流程不同,如下:
1、发送支付请求到微信 -> 微信返回支付Prepay_ID -> 发送支付信息到微信 -> 返回支付URL -> 生成二维码 -> 支付
2、发送支付信息到微信 -> 返回支付URL -> 生成二维码 -> 支付
网上有不少例子是使用第一种方式,但是我试了好几次都没成功。第二种方式非常简单,返回的支付URL业很短。最后使用了这种方式。
与支付宝不同的是,微信用POST提交方式,且需要提交XML,如下:
public static string Get_Code_URL(SortedDictionary<string, string> sParaTemp) { StringBuilder submitStr = new StringBuilder(); //要提交的数据 Dictionary<string, string> dPara = BuildRequestPara(sParaTemp); submitStr.Append("<xml>"); foreach (KeyValuePair<string, string> kvp in dPara) { submitStr.Append("<" + kvp.Key + ">" + kvp.Value + "</" + kvp.Key + ">"); } submitStr.Append("</xml>"); //提交 HttpWebRequest request = WebRequest.Create(PAY_URL) as HttpWebRequest; byte[] requestBytes = Encoding.GetEncoding("UTF-8").GetBytes(submitStr.ToString()); request.Method = "POST"; request.ContentType = "text/xml"; request.ContentLength = requestBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(requestBytes, 0, requestBytes.Length); requestStream.Close(); //获取结果 HttpWebResponse response = request.GetResponse() as HttpWebResponse; StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.GetEncoding("UTF-8")); string result = reader.ReadToEnd(); //处理结果 Dictionary<string, string> dicResult = ReceivePostXmlData(result); if (dicResult["return_code"] != null && dicResult["return_code"].Equals("SUCCESS")) { if (dicResult.Keys.Contains("code_url")) { return dicResult["code_url"].ToString(); } else { return ""; } } return ""; }
生成签名的方式跟支付宝一样,这里略过了。
还有一点需要特别注意的是参数问题。微信一共给了4个参数
APPID、MCH_ID、APPSECRET和KEY。
这里需要特别注意。生成签名用的是APPID、MCH_ID和KEY。刚开始,管理微信的人给了APPSECRET,跟KEY一样都是32位的,怎么也提示签名错误。后来揍了他一顿,又扣出来个KEY,一次成功!!!浪费了两天时间。
还有生成签名时需要注意。生成签名的字符串不要进行任务转码。
如果生成签名的参数正确的话,还是报错,可通过 http://mch.weixin.qq.com/wiki/tools/signverify/ 验证下,以查找自己代码的问题。
最后还是附上添加参数的代码:
SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>(); sParaTemp.Add("appid", WXConfig.APPID); sParaTemp.Add("mch_id", WXConfig.MCH_ID); sParaTemp.Add("trade_type", "NATIVE"); sParaTemp.Add("body", cp[0].OrderItem); sParaTemp.Add("nonce_str", WXConfig.WX_Nonce_Str()); sParaTemp.Add("notify_url", "http://my.test.sci99.com/wx_notify_url.aspx"); sParaTemp.Add("out_trade_no", cp[0].PayID.ToString()); sParaTemp.Add("spbill_create_ip", Page.Request.UserHostAddress); sParaTemp.Add("total_fee", (cp[0].CountMoney*10*10).ToString()); //单位分 sParaTemp.Add("product_id", cp[0].PayID.ToString()); string CODE_URL = WXConfig.Get_Code_URL(sParaTemp);
这里需要注意,微信支付的金额单位是分。
生成二维码用了Gma.QrCodeNet.Encoding.dll
相关文章推荐
- drupal 做301跳转(删除url里的www), 关键代码 可用到任何网站
- 我的网站历险记之第二章 理解些关键元素"代码","域名","空间"
- Paypal付款功能网站集成简明教程 示例代码
- 简单集成支付宝在线支付功能的关键代码
- 为网站集成代码编辑功能
- 电商网站中我的足迹/浏览历史实现关键代码
- drupal 做301跳转(删除url里的www), 关键代码 可用到任何网站
- springmvc和encache集成关键代码和总结
- 手机端访问PC端自动跳转到手机网站代码
- 手机端访问PC端自动跳转到手机网站代码
- (asp.net)PayPal案例的关键源码代码__PayPal集成_API接口
- QQ登录集成到自己网站php代码(转载)
- PC端网站自动识别为移动版的前端代码!
- 微信支付(网站支付,APP支付,扫码支付)并充值钻石 Java服务端代码 xml解析 map排序
- 某政府网站被加入自动下载病毒文件的代码(第3版)
- 网站首页head区代码规范(网页设计师必看)
- [转载] 网站成功的关键
- 开发出高性能的网站,第一部分 — 20个客户端代码优化技巧(转)
- 强烈推荐几个比较好的Java代码查询网站
- 网站首页head区代码规范