PC端网站集成微信支付的关键代码

目前来看,PC段实现微信支付,需要生成二维码,然后用微信扫码支付。

微信支付官网DEMO没有ASP.NET的,只能自己从帮助文档里扣代码摸索。这里需要说明几点特别要注意的。

看了下微信官网的文档,总结支付方式应该是两种:

1、Navite 静态链接方式。

2、JSAPI 方式。这种应该是手机端用到的。只支持微信内置浏览器。

我使用的是第一种方式。

但是据文档描述,这种方式还分为两种。请求流程不同,如下:

1、发送支付请求到微信 -> 微信返回支付Prepay_ID -> 发送支付信息到微信 -> 返回支付URL -> 生成二维码 -> 支付

2、发送支付信息到微信 -> 返回支付URL -> 生成二维码 -> 支付

网上有不少例子是使用第一种方式,但是我试了好几次都没成功。第二种方式非常简单,返回的支付URL业很短。最后使用了这种方式。

与支付宝不同的是,微信用POST提交方式,且需要提交XML,如下:

 1     public static string Get_Code_URL(SortedDictionary<string, string> sParaTemp)
 2     {
 3         StringBuilder submitStr = new StringBuilder(); //要提交的数据
 4         Dictionary<string, string> dPara = BuildRequestPara(sParaTemp);
 5         submitStr.Append("<xml>");
 6         foreach (KeyValuePair<string, string> kvp in dPara)
 7         {
 8             submitStr.Append("<" + kvp.Key + ">" + kvp.Value + "</" + kvp.Key + ">");
 9         }
10         submitStr.Append("</xml>");
11
12         //提交
13         HttpWebRequest request = WebRequest.Create(PAY_URL) as HttpWebRequest;
14         byte[] requestBytes = Encoding.GetEncoding("UTF-8").GetBytes(submitStr.ToString());
15         request.Method = "POST";
16         request.ContentType = "text/xml";
17         request.ContentLength = requestBytes.Length;
18         Stream requestStream = request.GetRequestStream();
19         requestStream.Write(requestBytes, 0, requestBytes.Length);
20         requestStream.Close();
21
22         //获取结果
23         HttpWebResponse response = request.GetResponse() as HttpWebResponse;
24         StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.GetEncoding("UTF-8"));
25         string result = reader.ReadToEnd();
26
27         //处理结果
28         Dictionary<string, string> dicResult = ReceivePostXmlData(result);
29         if (dicResult["return_code"] != null && dicResult["return_code"].Equals("SUCCESS"))
30         {
31             if (dicResult.Keys.Contains("code_url"))
32             {
33                 return dicResult["code_url"].ToString();
34             }
35             else {
36                 return "";
37             }
38         }
39         return "";
40     }

生成签名的方式跟支付宝一样,这里略过了。

还有一点需要特别注意的是参数问题。微信一共给了4个参数

APPID、MCH_ID、APPSECRET和KEY。

这里需要特别注意。生成签名用的是APPID、MCH_ID和KEY。刚开始,管理微信的人给了APPSECRET,跟KEY一样都是32位的,怎么也提示签名错误。后来揍了他一顿,又扣出来个KEY,一次成功!!!浪费了两天时间。

 

还有生成签名时需要注意。生成签名的字符串不要进行任务转码。

如果生成签名的参数正确的话,还是报错,可通过 http://mch.weixin.qq.com/wiki/tools/signverify/ 验证下,以查找自己代码的问题。

最后还是附上添加参数的代码:

 1      SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
 2         sParaTemp.Add("appid", WXConfig.APPID);
 3         sParaTemp.Add("mch_id", WXConfig.MCH_ID);
 4         sParaTemp.Add("trade_type", "NATIVE");
 5         sParaTemp.Add("body", cp[0].OrderItem);
 6         sParaTemp.Add("nonce_str", WXConfig.WX_Nonce_Str());
 7         sParaTemp.Add("notify_url", "http://my.test.sci99.com/wx_notify_url.aspx");
 8         sParaTemp.Add("out_trade_no", cp[0].PayID.ToString());
 9         sParaTemp.Add("spbill_create_ip", Page.Request.UserHostAddress);
10         sParaTemp.Add("total_fee", (cp[0].CountMoney*10*10).ToString()); //单位分
11         sParaTemp.Add("product_id", cp[0].PayID.ToString());
12
13         string CODE_URL = WXConfig.Get_Code_URL(sParaTemp);

这里需要注意,微信支付的金额单位是分。

生成二维码用了Gma.QrCodeNet.Encoding.dll

时间: 2024-07-31 10:45:44

PC端网站集成微信支付的关键代码的相关文章

小程序服务端集成微信支付

摘要: 换取openid->统一下单->发起支付,三步走,其中二次签名比较坑人. 该demo源码已托管到码云:http://git.oschina.net/dotton/lendoo-wx,欢迎下载. 理论上集成微信支付的全部工作可以在小程序端完成,因为小程序js有访问网络的能力,但是为了安全,不暴露敏感key,而且可以使用官方提供的现成php demo更省力,于是在服务端完成签名与发起请求,小程序端只做一个wx.requestPayment(OBJECT)接口的对接. 整体集成过程与JSAP

安卓 集成微信支付和支付宝

最近比较闲,公司项目更换后台,于是自己来研究微信支付和支付宝支付,把自己学习的过程写下来,以备以后查看. 注:要集成微信支付和支付宝功能,必须要有以下几个配置信息,而这写信息需要公司去微信支付和支付宝开放平台申请并提供给开发者,当然自己也可以去申请,这里作者用的是公司提供的,这里不纠结这些过程.获得这些信息以后 将配置信息放到一个静态类中,以共统一使用,但是处于安全考虑,微信与支付宝推荐这些数据放到服务器,这里作者把他们都放在前端,整个过程都是前端处理,实际开发尽量预处理订单生成放到后端处理.

iOS第三方支付集成——微信支付

近期笔者开发的项目中,需要用到支付宝支付和微信支付.大概一个月前,支付宝就已经集成完毕并可以正常使用.但在集成坑爹的微信支付SDK时,遇到了诸多问题,搞了将近三个星期.期间不断的跟后台同事核对代码(签名.下单),支付流程,其中的血泪艰辛,不言而喻.现笔者把集成过程中遇到的一些问题记录下来,供自己和大家参考.如果有什么不对的地方,也请大家多多指正: 吐槽完了,下面出正文. 补充说明:第一准备阶段不需要开发者负责操作,如果你是iOS开发人员,只想找到调用微信支付的代码,可直接跳过 第一准备阶段. 一

androidAPP 集成微信支付

最近项目里面需要支付功能,boss一致决定用微信支付,所以在网上查了很多资料,说的不全,完了就找以前的同事指教.算是成功集成上去了.在这里做个总结记录. 1.在APP上集成微信支付,首先当然是当官网上去注册并获取到支付功能.这些不涉及到开发,官网上说的很详细,这里就不多做文章.获取到这些能力了就为开发提供了条件了.开发中会用到的就是平台给的APPID.APPsercet.以及商户平台上设置的APP_key. 2.具备了支付能力等前提条件之后,就是开发过程了.代码里面怎么才能吊起支付了,参照官网上

.net制作的b2c网站集成农行支付集口碰见的错误及解决

b2c网站集成农行支付集口碰见的错误及解决 网站开发环境: ASP.NET,数据库:sqlserver 服务器:这一点也很关键:客户买的独立服务器是windows2008 64位系统 第一步:去农行,把的示例文件与接口下载起来.先使用农行提供的DEMO 有一个DLL文件需要引入的程序中. 第二步:按照要求制作所需要证书,这个在申请农行接口都会给一个电子证书下载索引.里面有,最好使用XP系统.这个不解释. 第三步:把web.config配置文件给配置了.按照要求,最关键就是:客户编号,证书位置等信

iOS 集成微信支付

目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难.如果你只是想实现该功能,一个方法足以,但是若你想深入了解实现原理.就需要花费更多的功夫了.目前我只清楚微信支付需要做签名,一种是在后台签名,一种是自己在前端签名.其实这对前端来说代码量并没有多大的改变,最大的区别是在后台签名逻辑更容易理解,而在前端签名逻辑有些混乱. 现在,小编也只是知道怎么使用,而不得其精髓,现在我附上我的学习链接,为了避免以后链接出现不可用情况,请各位理解小编的粘贴复制. 博客园(幻想无极) htt

iOS开发集成微信支付

首先需要理清楚流程: 1.用户使用APP客户端,选择商品下单. 2.商户客户端(就是你做的APP)将用户的商品数据传给商户服务器,请求生成支付订单. 3.商户后台调用统一下单API向微信的服务器发送请求,微信服务器生成预付单,并生成一个prepay_id返回给商户后台. 4.商户后台将这个prepay_id返回给商户客户端. 5.用户点击确认支付,这时候商户客户端调用SDK打开微信客户端,进行微信支付. 6.微信客户端向微信服务器发起支付请求并返回支付结果(他们之间交互用的就是prepay_id

网站添加微信支付功能(小白填坑)

本周的工作安排就是在网站添加支付功能,包括支付宝.微信.财付通等,今天这篇文章先说一下微信支付吧,支付宝的太容易了基本看一下都会了 1.首先准备工作,开通了支付功能的账号,具体怎么开通的我也不熟悉因为我做的时候都是使用开通好的账号(目前微信支付好像只支持商家不支持个人吧?) 2.按照我的性格当然是百度一下啦,但是微信支付的文档说明事例实在是太坑了,完全不是我这种小白可以一下看懂的,在这夸奖一下支付宝,支付宝的事例文档做的太好了基本做的时候没什么坑 准备工作结束开工: 我的开发环境是java,所以

iOS集成微信支付

微信支付的开发 前言:之前听说过微信支付有很多坑,其实没有想象的那么坑,整体感觉很容易上手,按照它的流程来不会有错!PS:官方的流程看的TMD烦,好啦,废话有点多,进入开发.(ps:每个微信的版本一直都在更新,这是2015/6/1给你们做的标记 1.    导入微信支付库 微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况.开发者需要在工程中链接上:SystemConfiguration.framework,libz.dylib,libsqlite3.0.dy