微信支付开发动态链接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 相关文章推荐
用PHP实现维护文件代码
Jun 14 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
php ajax 静态分页过程形式
Sep 02 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
jquery+php实现导出datatables插件数据到excel的方法
Jul 06 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php的单例模式及应用场景详解
Feb 27 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
php检测文本的编码
2015/07/26 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
Python中的取模运算方法
2018/11/10 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python实现控制台输出彩色字体
2020/04/05 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
如何获取某个日期是当月的最后一天
2013/12/05 面试题
通用求职信范文模板分享
2013/12/27 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
师德师风个人整改措施
2014/10/27 职场文书
志愿者事迹材料
2014/12/26 职场文书
优秀团员个人总结
2015/02/26 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
天气温馨提示语
2015/07/14 职场文书
2016年猴年新春致辞
2015/08/01 职场文书