微信支付开发动态链接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新手上路(十二)
Oct 09 PHP
php存储过程调用实例代码
Feb 03 PHP
php中隐形字符65279(utf-8的BOM头)问题
Aug 16 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php fread函数使用方法总结
May 28 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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中删除变量时unset()和null的区别分析
2011/01/27 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
ipad上运行python的方法步骤
2019/10/12 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
会计自我鉴定
2013/11/02 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
企业年度评优方案
2014/06/02 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
先进集体申报材料
2014/12/25 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android