1. 程式人生 > >微信支付v3開發(5) 掃碼並輸入金額支付

微信支付v3開發(5) 掃碼並輸入金額支付

關鍵字:微信支付 微信支付v3 動態native支付 統一支付 Native支付 prepay_id 
作者:方倍工作室

 

本文介紹微信支付下的掃描二維碼並輸入自定義金額的支付的開發過程。

注意

微信支付現在分為v2版和v3版,2014年9月10號之前申請的為v2版,之後申請的為v3版。V3版的微信支付沒有paySignKey引數。v2的相關介紹請參考方倍工作室的其他文章。本文介紹的為微信支付v3。

 

一. OAuth2.0授權

JSAPI 支付前需要呼叫 登入授權介面獲取到使用者的 Openid 。所以需要做一次授權,這次授權是不彈出確認框的。
其實質就是在使用者訪問

http://www.fangbei.org/wxpay/js_api_call.php

時跳轉到

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

以此來獲得code引數,並根據code來獲得授權access_token及openid

其實現的詳細流程可參考 微信公眾平臺開發(71)OAuth2.0網頁授權

 

二、獲取使用者輸入金額

上述流程中是獲得使用者的openid,另外還需要獲得本次的交易金額。

複製程式碼
    <body onselectstart="return true;" ondragstart="return false;">
        <form method="post" action="submit.php" id="form" onsubmit="return tgSubmit()">
            <div 
class="container gray_bg"> <div class="explain"> <h3> 企業微信支付-掃碼自定義金額 </h3> </div> <div class="box apply_box" id="applyBox"> <dl class="pb15"> <dt> 金額(¥) </dt> <dd> <input name="amount" class="txt required" id="amount" value="" placeholder="請輸入數字金額,單位元" type="tel" onkeyup="checkNum(this)"/> </dd> </dl> </div> <footer class="sub_wrap"> <input type="hidden" name="openid" value="<?php echo $openid;?>"> <input type="submit" class="btn mt20" id="subBtn" value="提交" /> <div class="copyright">技術支援 方倍工作室 </div> </footer> </div> </form> </body>
複製程式碼

 

三、拉取支付外掛

獲得openid和金額之後,直接使用統一訂單介面輸入引數

複製程式碼
    $jsApi = new JsApi_pub();
    
    //=========步驟2:使用統一支付介面,獲取prepay_id============
    //使用統一支付介面
    $unifiedOrder = new UnifiedOrder_pub();
    
    //設定統一支付介面引數
    //設定必填引數
    //appid已填,商戶無需重複填寫
    //mch_id已填,商戶無需重複填寫
    //noncestr已填,商戶無需重複填寫
    //spbill_create_ip已填,商戶無需重複填寫
    //sign已填,商戶無需重複填寫
    $unifiedOrder->setParameter("openid","$openid");//商品描述
    $unifiedOrder->setParameter("body","自定義價格掃碼商品");//商品描述
    //自定義訂單號,此處僅作舉例
    $timeStamp = time();
    $out_trade_no = WxPayConf_pub::APPID."$timeStamp";
    $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號 
    $unifiedOrder->setParameter("total_fee",($amount * 100));//總金額
    $unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 
    $unifiedOrder->setParameter("trade_type","JSAPI");//交易型別
    //非必填引數,商戶可根據實際情況選填
    //$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

    $prepay_id = $unifiedOrder->getPrepayId();
    // logger("prepay_id ".$prepay_id);
    //=========步驟3:使用jsapi調起支付============
    $jsApi->setPrepayId($prepay_id);

    $jsApiParameters = $jsApi->getParameters();
複製程式碼

詳細流程,可以參考 微信支付開發(1) JS API支付

 

四、效果展示

掃描二維碼