标签:输入密码 nbsp 也有 浏览器 sap mvc 拍照 home 生成
最近做了公众号支付,从无到有.大概经历如下步骤:
开发环境 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能节省好多时间...
标签:输入密码 nbsp 也有 浏览器 sap mvc 拍照 home 生成
原文地址:http://www.cnblogs.com/mirrortom/p/7244166.html