成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

微信公眾號(hào)開(kāi)發(fā)中的支付流程

蘇丹 / 3152人閱讀

摘要:今天聊一下微信公眾號(hào)開(kāi)發(fā)在授權(quán)網(wǎng)頁(yè)中的支付流程。前端獲得簽名后,再請(qǐng)求微信服務(wù)器,下面的支付流程就可以繼續(xù)下去了。

今天聊一下微信公眾號(hào)開(kāi)發(fā)在授權(quán)網(wǎng)頁(yè)中的支付流程。

微型公眾號(hào)開(kāi)發(fā)有以下幾個(gè)步驟:
1.獲取全局access_token
2.獲取網(wǎng)頁(yè)授權(quán)的access_token和refresh_token
3.獲取網(wǎng)頁(yè)授權(quán)的簽名(前端用于獲取調(diào)用JSSDK的權(quán)限)
4.公眾號(hào)支付-調(diào)用統(tǒng)一下單接口獲取prepay_id
5.公眾號(hào)支付-將簽名返回給前端用于請(qǐng)求微信公眾號(hào)支付

其中步驟1、2根據(jù)微信開(kāi)發(fā)文檔很容易完成;第3步就開(kāi)始用到簽名了,這一步的簽名相對(duì)來(lái)說(shuō)比較好做;第4、5步微信支付中的簽名對(duì)第一次做微信支付開(kāi)發(fā)的小伙伴來(lái)說(shuō)就有點(diǎn)麻煩了。

下面從第3步開(kāi)始說(shuō)吧。

第3步:獲取網(wǎng)頁(yè)授權(quán)的簽名,前端調(diào)用JSSDK時(shí),需要使用這個(gè)簽名。
這一步驟中,我們需要給前端返回如下數(shù)據(jù)(除jsApiList):
):

wx.config({
    debug: true, // 開(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: "",// 必填,簽名
    jsApiList: [] // 必填,需要使用的JS接口列表
});

其中,signature是一個(gè)關(guān)鍵的參數(shù)。生成簽名的規(guī)則可以去這里 https://mp.weixin.qq.com/wiki... 的 附錄1-JS-SDK使用權(quán)限簽名算法 中查看
生成簽名的代碼如下:

def post(self, request):
        url = request.data["url"]
        logger.debug("url:%s", url)
        # 權(quán)限驗(yàn)證配置信息
        platform_info = {"appId": WXConfig.APPID, "timestamp": 0, "nonceStr": "", "signature": ""}

        # 時(shí)間戳
        timestamp = int(time.time())
        # 隨機(jī)字符串,改方法自己實(shí)現(xiàn)即可
        noncestr = ToolToken.generate_noncestr()
        # jsapi_ticket
        ticket = cache.get("jsapi_ticket")
        if not ticket:
            # 重新獲取jsapi_ticket
            wx = WXToken()
            # 此處根據(jù)說(shuō)明文檔獲取jsapi_ticket即可
            wx.get_jsapi_ticket()

        logger.debug("ticket:%s", ticket)
        # 組合字符串,其中url是需要前端傳給我們的
        info_string = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "×tamp=" + str(timestamp) + "&url=" + url

        signature = hashlib.sha1(info_string.encode("utf-8")).hexdigest()
        platform_info["signature"] = signature
        platform_info["timestamp"] = timestamp
        platform_info["nonceStr"] = noncestr
        return Response(platform_info, status=status.HTTP_200_OK)

第4步:從這一步就開(kāi)始調(diào)用微信支付的相關(guān)接口了。這里一定要注意,調(diào)用微信支付接口時(shí),一定要看最新的說(shuō)明文檔,不要看舊的,不然會(huì)出現(xiàn)錯(cuò)誤,并且不容易找到原因。
調(diào)用統(tǒng)一下單接口的代碼如下:

async def unify_order(self):
        """
        請(qǐng)求微信統(tǒng)一下單接口
        :return:
        """
        url = "https://api.mch.weixin.qq.com/pay/unifiedorder"
        headers = {"Content-Type": "application/xml"}
        async with ClientSession() as session:
            async with session.post(url=url, data=self.xml_data, headers=headers) as res:
                ret = await res.text()
                logger.debug("ret:%s", ret)
                self.unify_order_data = self.xml_to_dict(ret)
                logger.debug("self.unify_order_data:%s", self.unify_order_data)

其中,self.xml_data內(nèi)容如下:


    你的appid
    pay
    paytest
    商戶號(hào)
    apple
    你生成的隨機(jī)字符串
    通知地址
    你的openid
    訂單號(hào)
    外網(wǎng)可訪問(wèn)ip地址
    訂單金額
    JSAPI
    MD5
    簽名

其中最后一個(gè)參數(shù)sign的值是需要通過(guò)其他參數(shù)加密得到的,簽名生成規(guī)則可以參考微信官方文檔。這里需要說(shuō)明一下,一定要加上sign_type這個(gè)參數(shù)(雖然官網(wǎng)說(shuō)明文檔中把這個(gè)參數(shù)標(biāo)記為不是必須的),顯式指定加密方法,不然可能得到簽名錯(cuò)誤的結(jié)果。

上面xml中的參數(shù)可以根據(jù)需求添加。

請(qǐng)求成功后,會(huì)返回prepay_id這個(gè)值,在下一步中會(huì)用到。返回結(jié)果可能如下:

{"return_code": "SUCCESS", "return_msg": "OK", "appid": appid, "mch_id": 商戶號(hào), "nonce_str": 隨機(jī)字符串, "sign": 簽名, "result_code": "SUCCESS", "prepay_id": prepay_id, "trade_type": "JSAPI"}

第5步:這一步中需要將以下信息返回個(gè)前端:

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ù)
            }
        });

除了success,其他參數(shù)都需要返回給前端。從 timestamp到paySign這幾個(gè)參數(shù)中,最難處理的又是簽名paySign。當(dāng)你看到上面那段js代碼時(shí),可能你看到的文檔已經(jīng)過(guò)時(shí)了,有可能誤導(dǎo)你。生成簽名給前端時(shí)可能只使用了timestamp,nonceStr,package,signType這幾個(gè)參數(shù),但是你將這樣生成的名返回前端時(shí),前端請(qǐng)求后可能得到簽名認(rèn)證錯(cuò)誤的提示。

正確的簽名生成方式是timestamp,nonceStr,package,signType和key(微信商戶平臺(tái)配置的key)都需要參與簽名;并且package的值不是第4步中返回的prepay_id的值,而是”prepay_id=”+prepay_id這樣一個(gè)字符串。具體如下:

appId=${appid}&nonceStr=${nonceStr}&package=prepay_id=${prepay_id}&signType=MD5&timeStamp=${timeStamp}&key=${key}

將上面的字符串加密即可獲得paySign的值。
前端獲得簽名后,再請(qǐng)求微信服務(wù)器,下面的支付流程就可以繼續(xù)下去了。

以上如有錯(cuò)誤之處,歡迎交流指正!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42401.html

相關(guān)文章

  • 淺析微信支付微信支付簡(jiǎn)單介紹(小程序、公眾號(hào)、App、H5)

    摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過(guò)手機(jī)完成快速的支付流程。目前微信支付支持手機(jī)系統(tǒng)有蘋(píng)果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒(méi)有看過(guò)的朋友們可以看一下。 淺析微信支...

    shadowbook 評(píng)論0 收藏0
  • 微信公眾號(hào)支付開(kāi)發(fā)全過(guò)程(java版)

    摘要:一微信官方文檔微信支付開(kāi)發(fā)流程公眾號(hào)支付首先我們到微信支付的官方文檔的開(kāi)發(fā)步驟部分查看一下需要的設(shè)置。配置微信公眾賬號(hào)支付配置支付類(lèi)所有方法都在這個(gè)類(lèi)里發(fā)起支付微信公眾賬號(hào)支付訂單異步回調(diào)這就是這個(gè)所說(shuō)的行代碼解決微信支付。 文章有不當(dāng)之處,歡迎指正,如果喜歡微信閱讀,你也可以關(guān)注我的微信公眾號(hào):好好學(xué)java,獲取優(yōu)質(zhì)學(xué)習(xí)資源。 一、微信官方文檔微信支付開(kāi)發(fā)流程(公眾號(hào)支付) 首先我...

    Shimmer 評(píng)論0 收藏0
  • 淺析微信支付支付驗(yàn)收示例和驗(yàn)收指引

    摘要:本文是淺析微信支付系列文章的第十一篇,主要講解支付驗(yàn)收示例和驗(yàn)收指引。為保證商戶接入質(zhì)量,提升交易安全及用戶體驗(yàn),微信支付的合作服務(wù)商在正式上線交易前,必須先根據(jù)本文指引完成驗(yàn)收。 本文是【淺析微信支付】系列文章的第十一篇,主要講解支付驗(yàn)收示例和驗(yàn)收指引。 淺析微信支付系列已經(jīng)更新十一篇了喲~,沒(méi)有看過(guò)的朋友們可以看一下。 淺析微信支付:如何使用沙箱環(huán)境測(cè)試 淺析微信支付:下載對(duì)賬單...

    Cympros 評(píng)論0 收藏0
  • 淺析微信支付:前篇大綱

    摘要:淺析微信支付前篇大綱本文是淺析微信支付系列文章的第一篇,主要會(huì)介紹一下為何寫(xiě)下這個(gè)系列以及對(duì)于微信支付的一點(diǎn)小經(jīng)驗(yàn),與君共勉。下面講一下我是如何去學(xué)習(xí)微信支付的。 淺析微信支付:前篇大綱 本文是【淺析微信支付】系列文章的第一篇,主要會(huì)介紹一下為何寫(xiě)下這個(gè)系列以及對(duì)于微信支付的一點(diǎn)小經(jīng)驗(yàn),與君共勉。 以下會(huì)分幾個(gè)步驟講一下我學(xué)習(xí)微信支付的過(guò)程,也是一部辛酸史,也是希望朋友們不要再次跌進(jìn)...

    mayaohua 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<