搜尋
首頁微信小程式微信開發微信公眾平台開發微信支付

微信公眾平台開發微信支付

Mar 01, 2017 am 09:59 AM
微信開發

一、JS-SDK

 公眾號中的微信支付需要透過JS來實現。微信JS-SDK是微信公眾平台提供給網頁開發者的以微信內為基礎的網頁開發工具包。

 

1)引入JS腳本檔案

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

## 

#2)透過config介面注入權限驗證配置

<script>
    wx.config({
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: &#39;&#39;, // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: &#39;&#39;, // 必填,生成签名的随机串
    signature: &#39;&#39;,// 必填,签名
});
</script>

appId就是應用程式ID,wx打頭的那串字符,

timestamp

在php中就用time()獲取,而

nonceStr

就用uniqid()獲取,而signature根據特定演算法獲取。

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

這裡說明下“jsapi_ticket”,jsapi_ticket是公眾號碼用於呼叫微信JS介面的臨時票據。正常情況下,jsapi_ticket的

有效期限為7200秒

,透過access_token來取得。由於有時間限制,而且取得jsapi_ticket的api呼叫次數非常有限,所以我會將取得到的jsapi_ticket儲存到

MongoDB

中。

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

 

#3)透過ready介面處理成功驗證

1)prepay_id是根據本地產生的訂單號碼等取得的,訂單號碼每次請求的得不一樣,不然會報錯的

2)nonceStr就用

md5(uniqid('baiaimama'))

獲取

3)signType使用MD54)paySign依照程式碼的參數,排序後拼接取得。

wx.chooseWXPay({
    timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
    nonceStr: '', // 支付签名随机串,不长于 32 位
    package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
    signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
    paySign: '', // 支付签名
    success: function (res) {
        // 支付成功后的回调函数
    }
});

/**
     * 生成jsapi需要调用的参数
     */
    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;
    }

二、非同步回呼

#非同步回調中做些修改訂單狀態、發送短信,推播訊息等操作。


/**
     * 微信支付异步回调API
     * 微信支付成功,会收到异步回调
     */
    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', '交易失败');
        }
    
        //签名验证失败
        if(!$weixinPay->checkSign($msg)){
            $weixinPay->notifyXml('FAIL', '签名验证失败');
        }
        //$notifyMongo->add($msg);
        //流程走到这里说明已经支付成功了,这里无需更新订单逻辑
        $userOrder = new UserOrder();
        //记录微信订单号
        $userOrder->pay($msg->out_trade_no, $msg->transaction_id);
    }

#demo下載:######################################################################### #####github網址:###https://github.com/pwstrick/weixin_demo#########CSDN網址:###http://download.csdn.net/detail/loneleaf1 /9045731### ######更多微信公眾平台開發微信支付 相關文章請關注PHP中文網! ##################################
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)