微信支付开发动态链接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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
MySql中正则表达式的使用方法描述
Jul 30 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
php实现的CSS更新类实例
Sep 22 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
php远程下载类分享
Apr 13 PHP
php中__toString()方法用法示例
Dec 07 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 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 高级课程笔记 面向对象
2009/06/21 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
PHP加密解密函数详解
2015/10/28 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
django做form表单的数据验证过程详解
2019/07/26 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
python如何实现DES加密
2020/09/21 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
学校元旦晚会方案
2014/02/19 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
客房部经理岗位职责
2015/02/02 职场文书
医院党建工作总结2015
2015/05/26 职场文书
单身证明范本
2015/06/15 职场文书
捐书仪式主持词
2015/07/04 职场文书
部门主管竞聘书
2015/09/15 职场文书
五年级语文教学反思
2016/03/03 职场文书
element多个表单校验的实现
2021/05/27 Javascript
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android