微信支付开发动态链接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简单提示框alert封装函数
Aug 08 PHP
php错误、异常处理机制(补充)
May 07 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
浅谈php和.net的区别
Sep 28 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP设计模式之单例模式定义与用法分析
Mar 26 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
使用原生js写的一个简单slider
2014/04/29 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
基于python实现微信模板消息
2015/12/21 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python select.select模块通信全过程解析
2017/09/20 Python
python中有函数重载吗
2020/05/28 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
美术专业学生个人自我评价
2013/09/19 职场文书
物流仓管员岗位职责
2013/12/04 职场文书
工程专业应届生求职信
2014/02/19 职场文书
电子专业求职信
2014/06/19 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python