zoukankan      html  css  js  c++  java
  • 微信支付开发(4) 动态链接Native支付

    关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 
    作者:方倍工作室
    原文: http://www.cnblogs.com/txw1958/p/wxpayv3_native_dynamic_qrcode.html 

    本文介绍微信支付下的基于动态链接二维码的Native支付实现流程。

    注意

    微信支付现在分为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

     

  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467392.html
Copyright © 2011-2022 走看看