原文:微信原生支付 Native扫码支付( V3.3.7 版本)php
[尊重别人的劳动成果,转载请注明出处:一缕晨光工做室,www.wispdawn.com]html
前言算法
辛苦研究三天,遇到各类困难,最终仍是克服了,把个人理解和思路分享给须要帮助的人,若是你觉的好,请帮我分享一下,谢谢。 在没有作以前,我觉得和支付宝,以及银联同样,会在官网找到相应的demo,照葫芦画瓢便可,没有什么复杂的,真正去作的时候,发现各类错误,不少时候都莫名其妙找不到北, 在网上搜了不知道多少遍,有V3版的,不过都是js api版本的,没有找到原生扫码支付,下了几个V2版本的微信支付c#demo,感受乱糟糟的。官网只提供了一个php版本的demo 研究了一天没有结果,次日我决定从官网的php的原生扫码支付,根据他的逻辑,用c#写出来,下面就是全部思路及代码,文章最后我放上整个解决方案压缩包。数据库
想实现扫码支付须要三大步骤c#
最终效果如图api
下面一步一步讲解数组
这步骤比较简单,根据官网文档 ,须要固定的参数,其中签名算法已经写好,以下代码微信
下图是用于生成二维码字符串,app
最终生成的url微信公众平台
weixin://wxpay/bizpayurl?appid=wxed94e****9b4bc&mch_id=122468****&nonce_str=877A9BA7A98F75B90A9D49F53F15A858& product_id=1&sign=B2A03B1B6583972FF67C8AD3D7414DD1&time_stamp=1420466744
有了文本想生成二维码就简单了,起初我是采用ThoughtWorks.QRCode.dll,后来发现一值报错,超出数组范围,估计是字符串太长了,最后选择使用一个开源项目 Gma.QrCodeNet.Encoding.dll,速度很快。
代码以下
前台js调用
这个页面主要任务是当扫码二维码的时候,微信向这个页面post XML数据,其中包含产品id,即二维码上的产品id ,咱们须要根据产品id,查询产品名称,总价格,以及一些附属信息, 咱们须要再次把这些参数post给微信统一支付接口,若是数据正确,微信会给咱们生成一个prepay_id 预支付id,咱们再次把prepay_id post给微信,整个流程便是这样子的,其实产品id就至关于一个订单号,惟一性,固然你也能够根据产品id,在这个页面里面下单,业务根据本身须要处理。
页面代码以下
这个页面用来处理成功通知的,微信把交易的结果依xml形式post该页面,当你收到消息后,若是成功了,你能够根据此来修改数据库,或者更新状态,等等。我作到这步时候,须要实现扫码二维码,支付成功后,3秒后调整, 实现思路是这样的,在二维码页面,setinterval get后台数据库是否已经支付,若是已经支付则执行settimeout 3秒后调整到成功页面。目前我是这样实现的,不知作别人怎么实现的。
通知代码以下。
若是你也是须要扫描原生支付,能够直接下载本解决方案,只须要把 WxPayHelper构造函数中的参数修改下便可使用
本文主要讲解整个思路,详细请看代码,点击下载本解决方案
尊重别人的劳动成功,转载请注明出处:一缕晨光工做室,www.wispdawn.com