天天看點

微信開放平台手機APP支付

            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>-&gt;SetBody(</code><code>$body</code><code>);  </code>

<code>$input</code><code>-&gt;SetAttach(</code><code>''</code><code>test”);    </code>

<code>$input</code><code>-&gt;SetOut_trade_no(</code><code>$order_sn</code><code>);  </code>

<code>$input</code><code>-&gt;SetTotal_fee(</code><code>$price</code><code>); </code>

<code>$input</code><code>-&gt;SetTime_start(</code><code>date</code><code>(</code><code>"YmdHis"</code><code>));  </code>

<code>$input</code><code>-&gt;SetTime_expire(</code><code>date</code><code>(</code><code>"YmdHis"</code><code>, time() + 60*10));    </code><code>//訂單失效時間,報錯可不寫</code>

<code>$input</code><code>-&gt;SetGoods_tag(</code><code>"tag"</code><code>);       </code><code>//設定商品标記,說明詳見代金券或立減優惠</code>

<code>$input</code><code>-&gt;SetNotify_url(</code><code>$notify_url</code><code>);   </code><code>//設定接收微信支付異步通知回調位址</code>

<code>$input</code><code>-&gt;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>'&amp;noncestr='</code><code>.</code><code>$order_data</code><code>[</code><code>'nonce_str'</code><code>].</code><code>'&amp;package=Sign=WXPay&amp;partnerid='</code><code>.WxPayConfig::MCHID.</code><code>'&amp;prepayid='</code><code>.</code><code>$order_data</code><code>[</code><code>'prepay_id'</code><code>].</code><code>'&amp;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>'&amp;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,如需轉載請自行聯系原作者