首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》17.3.2 模式二:动态链接

关灯直达底部

扫码支付模式二与模式一相比,流程更为简单,不依赖设置的回调支付URL。商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。

模式二的接口类代码如下,主要功能是设置参数、生成链接以及获得URL。


 1 /** 2  * 静态链接二维码 3  */ 4 class NativeLink_pub  extends Common_util_pub 5 { 6     var $parameters;        // 静态链接参数 7     var $url;                // 静态链接 8  9     function __construct10     {11     }12 13     /**14      * 设置参数15      */16     function setParameter($parameter, $parameterValue)17     {18         $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);19     }20 21     /**22      * 生成Native支付链接二维码23      */24     function createLink25     {26         try27         {28             if($this->parameters["product_id"] == null)29             {30                 throw new SDKRuntimeException("缺少Native支付二维码链接必填参数product_                   id!"."<br>");31             }32                $this->parameters["appid"] = WxPayConf_pub::APPID;// 公众账号ID33                $this->parameters["mch_id"] = WxPayConf_pub::MCHID;// 商户号34                $time_stamp = time;35                $this->parameters["time_stamp"] = "$time_stamp";// 时间戳36             $this->parameters["nonce_str"] = $this->createNoncestr;// 随机字符串37             $this->parameters["sign"] = $this->getSign($this->parameters);// 签名38             $bizString = $this->formatBizQueryParaMap($this->parameters, false);39             $this->url = "weixin:// wxpay/bizpayurl?".$bizString;40         }catch (SDKRuntimeException $e)41         {42             die($e->errorMessage);43         }44     }45 46     /**47      * 返回链接48      */49     function getUrl50     {51         $this->createLink;52         return $this->url;53     }54 }  

扫码支付模式二生成二维码的流程如下。

首先设置支付相关参数,其中需要自己指定的参数是商品的名称和价格,以及交易号。其他由系统自动获取或自动生成。其代码如下。


// 使用统一支付接口$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("sub_mch_id","XXXX");        // 子商户号  // $unifiedOrder->setParameter("device_info","XXXX");        // 设备号 // $unifiedOrder->setParameter("attach","XXXX");        // 附加数据 // $unifiedOrder->setParameter("time_start","XXXX");        // 交易起始时间// $unifiedOrder->setParameter("time_expire","XXXX");        // 交易结束时间 // $unifiedOrder->setParameter("goods_tag","XXXX");        // 商品标记 // $unifiedOrder->setParameter("openid","XXXX");        // 用户标识// $unifiedOrder->setParameter("product_id","XXXX");        // 商品ID// 获取统一支付接口结果$unifiedOrderResult = $unifiedOrder->getResult;  

参数生成之后,将生成如下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>  

将该XML数据向统一下单接口提交,返回的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就是最终要生成的二维码的链接。当用户扫描二维码时,就能直接拉取到商户信息并完成支付。