微信支付开发动态链接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利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
php使用反射插入对象示例分享
Mar 11 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
PHP SplObjectStorage使用实例
May 12 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
PHP抽象类基本用法示例
Dec 28 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/03/02 日漫
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
php读取msn上的用户信息类
2008/12/05 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
最基础的Python的socket编程入门教程
2015/04/23 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
Python调用服务接口的实例
2019/01/03 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
岗位职责范本
2013/11/23 职场文书
学生打架检讨书
2014/02/14 职场文书
中学生操行评语大全
2014/04/24 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
社区好人好事材料
2014/12/26 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
德劲DE1105机评
2022/04/05 无线电