微信支付开发动态链接Native支付


Posted in PHP onJuly 12, 2016

注意:

微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请的为v3版。V3版的微信支付没有paySignKey参数。v2的相关介绍请参考方倍工作室的其他文章。本文介绍的为微信支付v3。

一、生成商品信息

动态链接支付过程中,是先生成商品交易进行,再来进行支付交易的。

1. 商品信息准备

主要是先定义商品的名称及价格,以及交易号。代码如下。

include_once("../WxPayPubHelper/WxPayPubHelper.php");

  //使用统一支付接口
  $unifiedOrder = new UnifiedOrder_pub();
  
  //设置统一支付接口参数
  //设置必填参数
  //appid已填,商户无需重复填写
  //mch_id已填,商户无需重复填写
  //noncestr已填,商户无需重复填写
  //spbill_create_ip已填,商户无需重复填写
  //sign已填,商户无需重复填写
  $unifiedOrder->setParameter("body","贡献一分钱");//商品描述
  $timeStamp = time();
  $out_trade_no = WxPayConf_pub::APPID."$timeStamp";
  $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号 
  $unifiedOrder->setParameter("total_fee","1");//总金额
  $unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 
  $unifiedOrder->setParameter("trade_type","NATIVE");//交易类型
  //非必填参数,商户可根据实际情况选填
  $unifiedOrder->setParameter("device_info","100001");//设备号

上述参数最终封装成如下类似XML参数

<xml>
 <body><![CDATA[贡献一分钱]]></body>
 <out_trade_no><![CDATA[100001_1433009089]]></out_trade_no>
 <total_fee>1</total_fee>
 <notify_url><![CDATA[http://www.doucube.com/weixin/demo/notify_url.php]]></notify_url>
 <trade_type><![CDATA[NATIVE]]></trade_type>
 <device_info>100001</device_info>
 <appid><![CDATA[wx1d065b0628e21103]]></appid>
 <mch_id>1237905502</mch_id>
 <spbill_create_ip><![CDATA[61.129.47.79]]></spbill_create_ip>
 <nonce_str><![CDATA[gwpdlnn0zlfih21gipjj5z53i7vea8e8]]></nonce_str>
 <sign><![CDATA[C5A1E210F9B4402D8254F731882F41AC]]></sign>
</xml>

2. 调用统一支付请求

将上述XML发送给统一支付接口

https://api.mch.weixin.qq.com/pay/unifiedorder

 得到如下XML数据

<xml>
 <return_code><![CDATA[SUCCESS]]></return_code> 
 <return_msg><![CDATA[OK]]></return_msg> 
 <appid><![CDATA[wx1d065b0628e21103]]></appid> 
 <mch_id><![CDATA[1237905502]]></mch_id> 
 <device_info><![CDATA[100001]]></device_info> 
 <nonce_str><![CDATA[6u8ovTtFupTagsiY]]></nonce_str> 
 <sign><![CDATA[E84D8BC2331766DD685591F908367FF1]]></sign> 
 <result_code><![CDATA[SUCCESS]]></result_code> 
 <prepay_id><![CDATA[wx20150531020450bb586eb2f70717331240]]></prepay_id> 
 <trade_type><![CDATA[NATIVE]]></trade_type> 
 <code_url><![CDATA[weixin://wxpay/bizpayurl?pr=dNp7omD]]></code_url> 
</xml>

这样就得到一个code_url

程序将该code_url生成一个二维码,然后提供给用户扫

二、用户支付

1. 用户支付

用户支付成功后,微信将发送XML通知到notify_url中,内容如下

<xml>
 <appid><![CDATA[wx1d065b0628e21103]]></appid> 
 <bank_type><![CDATA[CFT]]></bank_type> 
 <cash_fee><![CDATA[1]]></cash_fee> 
 <device_info><![CDATA[100001]]></device_info> 
 <fee_type><![CDATA[CNY]]></fee_type> 
 <is_subscribe><![CDATA[N]]></is_subscribe> 
 <mch_id><![CDATA[1237905502]]></mch_id> 
 <nonce_str><![CDATA[gwpdlnn0zlfih21gipjj5z53i7vea8e8]]></nonce_str> 
 <openid><![CDATA[oMNKHuBTW4YWgNGAVQW00tWK6auM]]></openid> 
 <out_trade_no><![CDATA[100001_1433009089]]></out_trade_no> 
 <result_code><![CDATA[SUCCESS]]></result_code> 
 <return_code><![CDATA[SUCCESS]]></return_code> 
 <sign><![CDATA[03EEDE7ADE2ABB7916795F37F19A3D13]]></sign> 
 <time_end><![CDATA[20150531020838]]></time_end> 
 <total_fee>1</total_fee> 
 <trade_type><![CDATA[NATIVE]]></trade_type> 
 <transaction_id><![CDATA[1002750205201505310187709542]]></transaction_id> 
</xml>

notify_url收到以后,再返回确认成功消息给微信服务器

<xml>
 <return_code><![CDATA[SUCCESS]]></return_code>
</xml>

这样,一个动态链接Native就完成了。

使用订单查询接口查询该订单,返回如下

交易状态:SUCCESS
设备号:100001
用户标识:oMNKHuBTW4YWgNGAVQW00tWK6auM
是否关注公众账号:N
交易类型:NATIVE
付款银行:CFT
总金额:1
现金券金额:
货币种类:CNY
微信支付订单号:1002750205201505310187709542
商户订单号:100001_1433009089
商家数据包:Array
支付完成时间:20150531020837

以上就是对微信支付动态链接Native支付的资料整理,希望能帮助到开发微信支付的朋友。

PHP 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
PHP实现变色验证码实例
Jan 06 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP临时文件的安全性分析
Jul 04 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
PHP实现的进度条效果详解
May 03 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 #PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 #PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 #PHP
微信支付开发维权通知实例
Jul 12 #PHP
PHP生成短网址方法汇总
Jul 12 #PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 #PHP
微信支付开发告警通知实例
Jul 12 #PHP
You might like
php中处理模拟rewrite 效果
2006/12/09 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
全面理解Python中self的用法
2016/06/04 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
python实现连续图文识别
2018/12/18 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python对csv文件追加写入列的方法
2019/08/01 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
python创建文本文件的简单方法
2020/08/30 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
复核员上岗演讲稿
2014/01/05 职场文书
考试不及格的检讨书
2014/01/22 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
教师个人自我评价
2015/03/04 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
运动会加油稿
2015/07/22 职场文书