中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

微信公眾平臺(tái)如何開(kāi)發(fā)微信支付

這篇文章將為大家詳細(xì)講解有關(guān)微信公眾平臺(tái)如何開(kāi)發(fā)微信支付 ,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到萊山網(wǎng)站設(shè)計(jì)與萊山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋萊山地區(qū)。

一、JS-SDK

公眾號(hào)中的微信支付需要通過(guò)JS來(lái)實(shí)現(xiàn)。微信JS-SDK是微信公眾平臺(tái)面向網(wǎng)頁(yè)開(kāi)發(fā)者提供的基于微信內(nèi)的網(wǎng)頁(yè)開(kāi)發(fā)工具包。

1)引入JS腳本文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

2)通過(guò)config接口注入權(quán)限驗(yàn)證配置

<script>
    wx.config({
    debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。
    appId: '', // 必填,公眾號(hào)的唯一標(biāo)識(shí)
    timestamp: , // 必填,生成簽名的時(shí)間戳
    nonceStr: '', // 必填,生成簽名的隨機(jī)串
    signature: '',// 必填,簽名
});
</script>

appId就是應(yīng)用ID,wx打頭的那串字符,timestamp在php中就用time()獲取,而nonceStr就用uniqid()獲取,而signature根據(jù)特定算法獲取。

protected function getJsapiConfig()
    {
        $weixin = new Weixin();
        $ticketMongo = new WeixinJsapiTicket();
        $data = [
            'appId' => $weixin->getAppId(),
            'noncestr' => uniqid(),
            'jsapi_ticket' => $ticketMongo->getJsapiTicket(),
            'timestamp' => time()
        ];
        //拼裝原始待簽名串
        $src = [
            'noncestr=' . $data['noncestr'],
            'jsapi_ticket=' . $data['jsapi_ticket'],
            'timestamp=' . $data['timestamp']
        ];
        sort($src);
        $data['signature'] = sha1(implode('&', $src));
        return $data;
    }

這里說(shuō)明下“jsapi_ticket”,jsapi_ticket是公眾號(hào)用于調(diào)用微信JS接口的臨時(shí)票據(jù)。正常情況下,jsapi_ticket的有效期為7200秒,通過(guò)access_token來(lái)獲取。由于有時(shí)間限制,而且獲取jsapi_ticket的api調(diào)用次數(shù)非常有限,所以我會(huì)將獲取到的jsapi_ticket保存到MongoDB中。

/**
     * 通過(guò)access_token獲取jsapi_ticket
     * @param $access_token
     * @return string | null
     */
    public function getJsapiTicket($access_token)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket';
        $param = [
        'access_token' => $access_token,
        'type' => 'jsapi'
                ];
        $res = $this->request($url, $param);
        $result = json_decode($res, true);
        if (isset($result['errcode']) && $result['errcode'] == 0 && isset($result['ticket'])) {
            return $result;
        }
        return null;
    }

3)通過(guò)ready接口處理成功驗(yàn)證

1)prepay_id是根據(jù)本地生成的訂單號(hào)等獲取的,訂單號(hào)每次請(qǐng)求的得不一樣,不然會(huì)報(bào)錯(cuò)的

2)nonceStr就用md5(uniqid('baiaimama'))獲取

3)signType使用MD5

4)paySign根據(jù)代碼的參數(shù),排序后拼接獲得。

wx.chooseWXPay({
    timestamp: 0, // 支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫(xiě)。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫(xiě)其中的S字符
    nonceStr: '', // 支付簽名隨機(jī)串,不長(zhǎng)于 32 位
    package: '', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=***)
    signType: '', // 簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'
    paySign: '', // 支付簽名
    success: function (res) {
        // 支付成功后的回調(diào)函數(shù)
    }
});
/**
     * 生成jsapi需要調(diào)用的參數(shù)
     */
    public function getJsapiParam(){
        $param = [
        'appId' => $this->APPID,
        'timeStamp' => time(),
        'nonceStr' => md5(uniqid('baiaimama')),
        'package' => 'prepay_id='.$this->param['prepay_id'],
        'signType' => 'MD5'
                ];
    
        $str = [];
        foreach($param as $k=>$v){
            if(!empty($v)){
                $str[] = "{$k}={$v}";
            }
        }
        sort($str);
        $unsignKey = join('&', $str).'&key='.$this->KEY;
        $sign = strtoupper(md5($unsignKey));
        $param['paySign'] = $sign;
        return $param;
    }

二、異步回調(diào)

異步回調(diào)中做些修改訂單狀態(tài)、發(fā)送短信,推送消息等操作。

/**
     * 微信支付異步回調(diào)API
     * 微信支付成功,會(huì)收到異步回調(diào)
     */
    public function actionWxpay()
    {    
        $weixinPay = new WeixinPay();
        $weixin = new Weixin();
        
        $xml = file_get_contents('php://input');
        $msg = $weixin->parseMsg($xml);
    
        //記錄微信推送日志
        $notifyMongo = new WeixinPayNotify();
        $notifyMongo->logPayNotify($xml);

        if(!$msg || !is_object($msg)){
            $weixinPay->notifyXml('FAIL', '通知不合法');
        }
    
        if(!isset($msg->return_code) || $msg->return_code != 'SUCCESS'){
            $weixinPay->notifyXml('FAIL', '通信失敗');
        }
    
        if(!isset($msg->result_code) || $msg->result_code != "SUCCESS"){
            $weixinPay->notifyXml('FAIL', '交易失敗');
        }
    
        //簽名驗(yàn)證失敗
        if(!$weixinPay->checkSign($msg)){
            $weixinPay->notifyXml('FAIL', '簽名驗(yàn)證失敗');
        }
        //$notifyMongo->add($msg);
        //流程走到這里說(shuō)明已經(jīng)支付成功了,這里無(wú)需更新訂單邏輯
        $userOrder = new UserOrder();
        //記錄微信訂單號(hào)
        $userOrder->pay($msg->out_trade_no, $msg->transaction_id);
    }

關(guān)于“微信公眾平臺(tái)如何開(kāi)發(fā)微信支付 ”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

本文名稱:微信公眾平臺(tái)如何開(kāi)發(fā)微信支付
文章網(wǎng)址:http://www.rwnh.cn/article32/psjdpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、ChatGPT、網(wǎng)站內(nèi)鏈、軟件開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
晋州市| 宁乡县| 宕昌县| 平江县| 河北区| 吴堡县| 乌拉特后旗| 基隆市| 嘉祥县| 福海县| 敖汉旗| 石嘴山市| 封开县| 宣汉县| 古蔺县| 门源| 霍林郭勒市| 明溪县| 安宁市| 彩票| 虎林市| 专栏| 栾川县| 前郭尔| 肥城市| 古交市| 子洲县| 嘉兴市| 阿坝县| 平利县| 博兴县| 武宁县| 外汇| 长寿区| 舟山市| 新郑市| 阳春市| 息烽县| 鲁甸县| 沙河市| 冷水江市|