微信公众号支付开发

Posted MirrorSpace

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信公众号支付开发相关的知识,希望对你有一定的参考价值。

最近做了公众号支付,从无到有.大概经历如下步骤:

开发环境 VS2015 W10 .NET4.6

一.公众号

    客户公司没有公众号,也不会申请.于是打开微信公众号介面,告诉它一步步弄.最后申请了一个服务号,并且提交了认证申请.其中大概有几处注意 : 微信号公众号名字(这个有被占用的情况).认证时提交的身份信息,企业的三证合一拍照上传.

    认证申请提交后第3天时通过了,然后进入微信号开通支付功能,这个是指公众号的支付功能.过程中需要绑定银行帐号,选择经营项目,注意各项目营收费率不一样,经营资质拍照上传.这次不太顺利,第一次的审核失败了.后来重新填写了所有资料,重新拍照,将几张资料合成了一张图上传.结果成功了.申请过程中微信会打一个钱数到绑定的银行账号上,需要申请者确认.

二.开发前配置

     在申请了服务号并且认证通过,然后支付功能开通并且审核通过后.可以使用微信支付功能了.但还需要进行一些配置.

     除了对公众号的基本配置,Secret外.与支付有关的是MCHID(支付商户的ID) KEY(商户的密码).大多数接口都需要这些参数.这KEY参数需要登录商户后台设置API支付安全来获得.如何登录商户后台呢,只要支付开通成功后,会收到一个邮件.这邮件里有登录商户后台的账号和密码.

     开发前需要设置两处地方,

  1.微信支付授权目录:在进入公众号后,微信支付->开发配置->公众号支付这里写一个URL路径.(上面提示说8月后,不再此处设置了,是搬到商户后台里设定)

          http://域名/home/wxpaymain/  // 说明:使用ASP.NET MVC.支付页面是home控制器下的wxpaymain这个action返回的一个视图 注意后台的/. 另外,域名必须备案通过.

        2.设置网页授权域名:进入公众号后,点击公众号设置->功能设置->网页授权域名

          wx.xxx.com // 说明:这个域名可与授权目录的域名一样.域名也必须备案通过,设定时,要下载一个文件放到这域名下.

          授权域名的一个重要作用就是,授权域名下可以调用微信OAUTH2相关接口,能拿到微信使用者的OPENID.而多数业务需要使用OPENID绑定到自身业务的账号.

三.流程(步骤实现是自己的案例)

     开发的流程可以仔细查询微信文档(业务流程)https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4

     第1步.微信用户点击了公众号的菜单,例如"缴 费",实质是一个处理地址(地址可以在公众号的自定义菜单上配置).该地址返回一个页面,展示商品信息如价格.

    该地址主要处理了1.调用OAUTH2接口,拿到OPENID 2.将这OPENID绑到URL上定向到商品页面(也可以加密放COOKIE)

     第2步.用户在页面上选好商品,或者输入价钱后,点击"付款".后台程序会返回一个确认的页面.

               后台处理:1.根据用户商品号生成一个商户订单,然后调用微信支付的"统一下单"接口.主要是拿到pre_payid(这个过程就好像是在进行一次支付交易前,微信先给生成一个预付确认)

                              2.调用"统一下单"接口成功后,拼接"支付参数",就是公众号支付H5页面调用的JSAPI所需要的参数.这个JSAPI只在微信浏览器里有效.

                                   @html.Raw(pay.JsApiPara.ToJson()) // 参数是一个JS对象,由于MVC会编码字符串,所以可以使用这函数不编码输出,到页面上就是一个JS对象

                到此时,如果用户点击页面上的"确认付款",就会弹出那个熟悉的微信支付的界面,然后是输入密码,然后是交钱成功....

      第3步.用户点击"确认支付".调用了那JS接口请求微信支付的服务器 --> 服务器向用户请求授权(输入密码界面) --> 微信支付服务器收到授权处理后 -->  回调商户后台 和 返回支付结果页面

                1.在 回调商户后台时:

                        微信支付服务器回调商户后台时,做了以下动作.1.验证回调的真实性,2.查询transaction_id的真实性3.根据支付结果执行商户业务逻辑.

                2.在返回支付结果页面:

                          会显示支付成功或者失败.下面有一个按钮"返回商户",点击它时,就会执行JSAPI的回调函数.在这个回调函数里.可以根据商户订单号查询后台,验证缴费是否成功.这个订单号是在第2步生成

                          确认页 面时,加密放在页面中的.查询后台后,返回一个描述"您已成功支付多少钱!商品3日内到!"

      第4步.用户见到商户返回的支付结果.一个支付过程结束了.

                 商户需要下载对账单进行对账.微信支付10点生成昨天的对账单.这是一个文本内容逗号隔开的那种,可以存为CSV用EXCEL打开.下载对账单之后,可以与商户系统的订单一一比对,使用商户订单号比较.

                 商户需要有一个查询服务,为了防止商户系统内的账单未得到回调,或者错误的账单.需要定时查询这些没有被回调确认的账单,具体就是使用商户订单号去微信支付服务器上查询订单状态,如果是成功的

            就更新系统内该订单的状态,如果是无效的,也做下标识.

四.开发

          基本上.微信支付文档比较完善了对于公众号支付(也有其它种类的支付)有DEMO可以参考.地址 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 

          有.NET版本的DEMO.下载这版本之后,里面的注释很齐全.代码结构也很合理.虽然是WEBFORM的,不过只需要将基础的类和需要用到的API类取出来.直接放到MVC项目中

    另外单独做一个配置放支付相关的信息.然后马上可以调试.

           想到以前弄支付宝的时候,没有DEMO只有文档....光一个签名就弄了很久.还有很多细节很容易出错.....一个好的DEMO能节省好多时间...

           

以上是关于微信公众号支付开发的主要内容,如果未能解决你的问题,请参考以下文章

NodeJs 开发微信公众号微信事件交互

PHP开发微信公众号的问题

使用koa2开发微信公众号之网页授权

NodeJs 开发微信公众号微信事件交互

如何使用jsp开发微信公众平台,或者使用java语言开发公众平台

开发微信公众号后台,原来这么简单?[微信公众号开发]