记微信公众平台开发之V3版微信native原生支付功能开发

一、生成商品信息

动态链接支付过程中,是先生成商品交易进行,再来进行支付交易的。

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

时间: 2024-12-26 03:25:13

记微信公众平台开发之V3版微信native原生支付功能开发的相关文章

Java微信公众平台开发之OAuth2.0网页授权

根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修改授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头,也不需要加具体的项目名,在域名空间的根目录放一个txt文件才能验证通过一.两种scope授权方式 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静

微信公众平台开发之emoji表情的使用

关于表情的各种符号代码,参照柳老师的博客:http://blog.csdn.net/lyq8479/article/details/9229631 这里只介绍简单的使用方法. 我们以一个微笑的表情来看,它的表达式有三种: [微笑] 2. /微笑 3. /::) 在CoreService核心类中加入代码测试: public class CoreService {    public static String processRequest(Map<String, String> requestM

微信公众平台消息接口PHP版开发教程

原文:微信公众平台消息接口PHP版开发教程  一.写好接口程序 在你的服务器上上传好一个接口程序文件,如http://www.yourdomain.com/weixin.php  内容如下: <?php define("TOKEN", "weixin");//自己定义的token 就是个通信的私钥 $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); //$wechatObj-&

再小的个体,也有自己品牌:通过微信公众平台,可以实现大量微信应用

微信营销是网络经济时代企业对营销模式的创新,是伴随着微信的火热产生的一种网络营销方式.自从微信推出公众平台以来,我就一直在探索如何在不写代码.不搞开发的情况下并且搞好微信营销.微酷WeiKuCMS是中国最大的微信营销平台,那里你会发现微信营销的魅力.接下来我就跟大家分享一下我的经验:利用第三方微信营销托管平台快速增加粉丝,形成良好互动,打造精美微信APP. 你的需求是不是以下几点? 1.快速增加公众号粉丝 2.改善智能客服,提升服务品质 3.建设一个微信专属的微官网 4.增加粉丝互动,送出礼品回

微信公众账号开发之N个坑(一)

我这人干活没有前奏,喜欢直接开始.完了,宝宝已经被你们带污了.. 微信公众账号开发文档,官方版(https://mp.weixin.qq.com/wiki),相信我,我已经无力吐槽写这个文档的人了,我真心想杂碎这个键盘,但是下手之后才发现,原来键盘是我自己花钱买的....尴尬了. 废话不说,直接说怎么部署,怎么开发. 首先,你得有一个公众平台账号,好了,开始计坑. 第一坑,不要以为不是企业号就不能开发了,可以申请测试号的,比所谓的订阅号接口多多了. 进入后台管理之后,点击开发者工具,可以看到公众

微信公众号开发之VS远程调试

前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先判断消息的合法性,判断成功后根据消息体的内容做相应的相应.原理很容易理解,接触过socket的可能理解起来更容易. 其实微信开发并不是很麻烦或者很难,官方给的文档也还算过的去(至少比微信支付的文档好上百倍),最让人痛苦的就是调试,因为微信开发的过程中,用户接收微信发送过来的消息的处理程序对于微信来说

微信公众平台推出针对开发者的微信认证事件推送

微信公众帐号的微信认证涉及开发者接口的赋予,高级接口需要认证通过才能获得,为了帮助公众号开发者获取公众号的认证状态,微信公众平台开始提供公众号认证过程中各阶段的事件推送,会推送到在开发者中心填写的服务器地址中. 微信认证包含资质认证和名称认证两个阶段,具体事件推送包括以下6种类型(点击查看开发者文档): 1. 资质认证成功(此时获得认证公众号才有的接口权限) 2. 资质认证失败 3. 名称认证成功(此时获得微信客户端中公众号的打勾认证标识) 4. 名称认证失败(此时虽然未获得打勾,但仍有接口权限

微信公众号开发之js-sdk开发

公司最近项目需要使用微信进行分享,对微信的jssdk研究了下,由于研究过程并不顺利,遇到的坑比较多,所以特意将研究结果记录下来,供大家批评和参考! 官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 微信的jssdk是面向网页开发者提供的基于微信内的网页开发工具包,提供了诸如分享朋友圈,分享微信好友,分享QQ好友 and so on,具体支持的文档参考上述官方文档; 在进行微信jssdk开发之前,首先你得拥

微信公众平台——token验证php版

这几天开始接触微信公众号的开发,注册这些就不说了,我是先弄了个测试号用着.进入正题 所谓token验证,其实就是微信服务器向自己要用到的服务器url发送一段数据,其中有一个参数$_GET['echhostr'],这个参数在经过一系列逻辑判断后再原封不动返回给微信也就是 echo $_GET['echhostr']; 碰到的一些小问题解决方法如下: 1.微信开发后台上的token要与php代码中定义的一致: 2.加header('content-type:text'); 3.还不行就加 ob_cl