微信支付开发动态链接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 相关文章推荐
批量修改RAR文件注释的php代码
Nov 20 PHP
PHP daddslashes 使用方法介绍
Oct 26 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php计算整个目录大小的方法
Jun 19 PHP
PHP实现简单实用的分页类代码
Apr 08 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
PHP 数组黑名单/白名单实例代码详解
Jun 04 PHP
php报错502badgateway解决方法
Oct 11 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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中static,const与define的使用区别
2013/06/18 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python基于百度云文字识别API
2018/12/13 Python
python+pyqt5编写md5生成器
2019/03/18 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
python 字典的打印实现
2019/09/26 Python
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
质检的岗位职责
2013/11/17 职场文书
个人收入证明范本
2014/01/12 职场文书
给客户的道歉信
2014/01/13 职场文书
大学生自我鉴定书
2014/03/24 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
团日活动总结报告
2014/06/25 职场文书
老龄工作先进事迹
2014/08/15 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
三八妇女节寄语
2015/02/27 职场文书
python基础之停用词过滤详解
2021/04/21 Python
golang 实现菜单树的生成方式
2021/04/28 Golang
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
Python经常使用的一些内置函数
2022/04/11 Python