• 微信公众号支付开发


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

    开发环境 VS2015 W10 .NET4.6

    一.公众号

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

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

    二.开发前配置

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

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

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

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

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

              如果这个授权域名填写错误或者没按规则填写支付处理页面所在的目录,则支付时页面上会报"未注册URL"的错误.

            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的真实性,根据这个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能节省好多时间...

               

  • 相关阅读:
    sql STUFF用法
    关于原型链
    原生js事件绑定
    http常见7种请求
    关于linux的一些常用的指令
    flex布局详解
    html5 新增元素以及css3新特性
    css浮动以及清除
    css 浮动
    计算机网络
  • 原文地址:https://www.cnblogs.com/mirrortom/p/7244166.html
Copyright © 2020-2023  润新知