PHP對接APP微信支付
微信開放平台手機APP支付總結
1. 微信開放平台手機APP支付總結
<a href="https://pay.weixin.qq.com/wiki/doc/api/index.html" target="_blank"></a>
<a href="https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3" target="_blank"></a>
首先了解微信手機APP開放平台文檔支付流程, 雖然個人感覺微信給出的文檔沒有支付寶官方給出的文檔詳細, 但是認真研究還是可以克服困難的, 有的問題在網上也是可以找到解決方案的. 微信開放平台和微信公衆平台的所使用的demo使用的都是同一個JsApi的demo,業務流程是一樣的, 隻要服務端做好處理将業務參數傳給用戶端即可. 還有一個要注意的問題, 是在退款時需要用到商戶的證書.
2. 傳遞商戶交易号和價格去微信進行生成預支付訂單
<code>$input</code> <code>= </code><code>new</code> <code>WxPayUnifiedOrder();</code>
<code>$input</code><code>->SetBody(</code><code>$body</code><code>); </code>
<code>$input</code><code>->SetAttach(</code><code>''</code><code>test”); </code>
<code>$input</code><code>->SetOut_trade_no(</code><code>$order_sn</code><code>); </code>
<code>$input</code><code>->SetTotal_fee(</code><code>$price</code><code>); </code>
<code>$input</code><code>->SetTime_start(</code><code>date</code><code>(</code><code>"YmdHis"</code><code>)); </code>
<code>$input</code><code>->SetTime_expire(</code><code>date</code><code>(</code><code>"YmdHis"</code><code>, time() + 60*10)); </code><code>//訂單失效時間,報錯可不寫</code>
<code>$input</code><code>->SetGoods_tag(</code><code>"tag"</code><code>); </code><code>//設定商品标記,說明詳見代金券或立減優惠</code>
<code>$input</code><code>->SetNotify_url(</code><code>$notify_url</code><code>); </code><code>//設定接收微信支付異步通知回調位址</code>
<code>$input</code><code>->SetTrade_type(</code><code>"APP"</code><code>); </code><code>//設定類型如下:JSAPI,NATIVE,APP</code>
<code>$order_data</code> <code>= WxPayApi::unifiedOrder(</code><code>$input</code><code>); </code><code>//統一下單</code>
注釋:$order_data 為微信傳回的訂單生成結果。如下所示
appid mch_id nonce_str prepay_id result_code return_code return_msg
sign (簽名,此時傳回的簽名不能給APP端調用,需要重新生成簽名)
trade_type prepay_id (資料最重要。)
3. 将微信傳回的prepay_id資料再次簽名,再傳回給APP端。
擷取到 prepay_id 後,将參數 appid、noncestr、package(注意:Sign=WXPay)、partnerid、prepayid、timestamp 簽名後傳回給 APP。
<code>$order_data</code><code>[</code><code>'timestamp'</code><code>] = time();</code>
<code>$str</code> <code>= </code><code>'appid='</code><code>.</code><code>$order_data</code><code>[</code><code>'appid'</code><code>].</code><code>'&noncestr='</code><code>.</code><code>$order_data</code><code>[</code><code>'nonce_str'</code><code>].</code><code>'&package=Sign=WXPay&partnerid='</code><code>.WxPayConfig::MCHID.</code><code>'&prepayid='</code><code>.</code><code>$order_data</code><code>[</code><code>'prepay_id'</code><code>].</code><code>'&timestamp='</code><code>.</code><code>$order_data</code><code>[</code><code>'timestamp'</code><code>];</code>
<code>$order_data</code><code>[</code><code>'sign'</code><code>] = </code><code>strtoupper</code><code>(md5(</code><code>$str</code><code>.</code><code>'&key='</code><code>.WxPayConfig::KEY));</code>
<code>echo</code> <code>json_encode(</code><code>$order_data</code><code>);</code>
4. 支付完成回調處理
可參考demo回調處理方法notify.php進行業務邏輯處理即可.
支付完成! 可根據自己的業務流程修改業務邏輯 .
本文轉自噼裡啪啦啦 51CTO部落格,原文連結:http://blog.51cto.com/pilipala/1917634,如需轉載請自行聯系原作者