微信支付接口开发之--微信扫码支付

来源:互联网 发布:java下载32位 xp 编辑:程序博客网 时间:2024/04/29 21:55
开发文档https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5


1、模式一
 
实现步骤
1)、生成支付链接或是二维码
链接格式如下:
weixin://wxpay/bizpayurl?appid=wxa842e8005c427e2d&mch_id=1314710101&nonce_str=3c6d11d09c2f4d49a7c18386cf8f3a14&product_id=123456789&sign=4AC5113048BD4A08E16DD8DC8D69A744&time_stamp=1456365970
这一步可能出现的错误:
扫码后微信提示:原生支付URL参数错误
原因:商户密钥key如果错了也会出现这个提示,URL的参数少传或是格式错了,或是签名错了都会出现这个错误
2)、用户扫描或是点进去1)中生成的链接,微信支付系统会在后台调用在“微信公众号”配置里设好的“扫码支付支付回调URL”,并向回调URL地要传递
openid和product_id进行统一下单
        回调URL的作用:接收微信支付后台发送的扫码结果,调用统一下单接口并将下单结果返回给微信支付后台
回调URL设置如下图
在回调URL里的统一下单代码如下:
在回调URL里,返回给调用它的微信支付系统后台的参数如下:
    在WxPayApi官方示例这一步会出的错误
    错误一:
原因:在商户的回调URL的处理里出错,或是超时,如在官网提供的示例里就出了这个错,检查原因如下(坑太多了呢。。。。):
在WxPayApi的Data.cs里public SortedDictionary<string, object> FromXml(string xml)方法出错,改成下面自己写的
 
 
 
3、如果2)成功后会自动跳到微信支付的统一界面

 
2、模式二
描述:
    模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL,也没有“支付授权目录”的限制。商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。注意:code_url有效期为2小时,过期后扫码不能再发起支付。

业务流程时序图

业务流程说明:
二维码规则
 
 
实现步骤
步骤一:调用统一下单接口
步骤二:统一下单接口会返回code_url参数,将它生成二维码就可以了
代码如下:
即:向https://api.mch.weixin.qq.com/pay/unifiedorder接口post下面格式的数据就行:
<xml><appid><![CDATA[wxa842e8005c427e2d]]></appid><attach><![CDATA[这是易度附加数据]]></attach><body><![CDATA[这是易度商品描述]]></body><goods_tag><![CDATA[jjj]]></goods_tag><mch_id><![CDATA[1314710101]]></mch_id><nonce_str><![CDATA[b4f9d98a8d194f729220173bc31fd3d5]]></nonce_str><notify_url><![CDATA[http://paysdk.weixin.qq.com/example/ResultNotifyPage.aspx]]></notify_url><out_trade_no><![CDATA[131471010120160229144430504]]></out_trade_no><product_id><![CDATA[123456789]]></product_id><sign><![CDATA[0430049F917C36BA1A2EC4778AE71AC6]]></sign><spbill_create_ip><![CDATA[8.8.8.8]]></spbill_create_ip><time_expire><![CDATA[20160229145430]]></time_expire><time_start><![CDATA[20160229144430]]></time_start><total_fee>1</total_fee><trade_type><![CDATA[NATIVE]]></trade_type></xml>




   前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了不少技术文章,却发现都只是比较粗略的写他们是怎么开发接入的,并没有解决我遇到的问题...,唉,有时候真心的感觉‘只能靠自己’。本文就是想把自己遇到的问题及解决办法写出来,让做这方面开发的朋友有所帮助!

 

  开发之前,先查看官方【扫码支付】开发文档,扫码支付分为以下两种模式:

 

  △模式一:

  遇到的问题:第一次扫描二维码还能正常扫描,未付款再次扫描会提示:ok 或 请求商户信息超时HttpCode非200——此问题尝试通过各种途径寻找解决办法都无果,在这里希望有知道朋友能给与解答,谢谢!

 

  △模式二:

  注意:不可以直接用商城的订单号作为交易订单号(out_trade_no),否则再次生成微信扫码支付二维码时,接口会提示:商户订单号重复,无法重新生成。

  那么酱紫问题来了,应该怎样设置交易订单号,还能保证后面通过接口查询微信商户平台里的相应订单信息或实现对账?可行的办法是:扫码之前的统一下单接口,out_trade_no不要传入商城订单系统的订单号,而是重新生成一个新的唯一流水;再增加一个订单号和微信支付交易订单号(out_trade_no)对应表,如下:

 

 

     上表中有个serial_is_paid字段:用于标记此交易是否已完成,即:在支付成功通知回调处理中,根据回传的out_trade_no更新支付状态;至于怎么查询订单支付状态,想必你应该也知道了...

     

 

  

  【2016-2月 补充】创建支付订单和成功回调参数中都有“attach”字段——直接设置为交易流水号即可方便对订单进行处理,以上方式实属对api未详细查阅的愚笨之举,特补充更正!

  

 


 
 
















 
原创粉丝点击