iOS微信支付中的兩次簽名(2018年初)

早就聽(tīng)說(shuō)微信支付文檔寫的不是很好,奈何沒(méi)想到簽名這一塊整整折磨了我2天時(shí)間。

網(wǎng)上招了一些資料但不是特別全面,因?yàn)?018年的微信支付跟之前的不太一樣。所以自己慢慢踩坑借鑒,終于做完了兩次簽名的過(guò)程。

其實(shí)很早的時(shí)候,就想寫技術(shù)blog了,之前因?yàn)閼泻筒说脑?,現(xiàn)在希望自己能一步一個(gè)腳印把這件事干好。



話題扯遠(yuǎn)了,我們正式開(kāi)始說(shuō)明一下微信支付的兩次簽名

第一次簽名應(yīng)該是后臺(tái)做的,因?yàn)轫?xiàng)目的實(shí)際情況,要求前端自己進(jìn)行簽名。

因?yàn)橐?qǐng)求統(tǒng)一下單接口才能獲得調(diào)起微信支付功能所需要的prepay_id

統(tǒng)一下單接口

而請(qǐng)求這個(gè)接口又需要簽名,我調(diào)試支付時(shí)大多數(shù)時(shí)間都卡在了第一次簽名,因?yàn)槲臋n寫的太簡(jiǎn)單了。


簽名算法

很明顯的是,你首先要把算法寫對(duì)。算法如下:


第一次簽名的算法

這里的signParams的字典里放的是加密必須要的字段。注意,這里所需的字段是請(qǐng)求統(tǒng)一下單的接口里面的所有的字段(除開(kāi)要生成的sign),很多人都因?yàn)楸还俜轿臋n誤導(dǎo)了,少了一些字段去生成簽名,然后請(qǐng)求統(tǒng)一下單的接口,會(huì)報(bào)簽名失敗的錯(cuò)誤。


根據(jù)自身傳的值來(lái)填寫

算法是首先字典轉(zhuǎn)成字符串,然后按照首字母順序排序,加上密鑰的key

然后你會(huì)遇到第二個(gè)坑,這個(gè)密鑰key不是appSecret,而是API密鑰,需要在商戶平臺(tái)設(shè)置

最后再進(jìn)行MD5加密就行了



拿到正確的sign之后,就可以請(qǐng)求接口啦~


請(qǐng)求接口代碼

請(qǐng)求接口時(shí),需要注意兩點(diǎn):

1、需要對(duì)字典轉(zhuǎn)xml

? ? 轉(zhuǎn)xml有兩種方式,第一種可以自己組裝,第二種可以用XMLDictionary

2、請(qǐng)求的字段必須和簽名的字段一樣(除sign外)

? ? 不一樣鐵定報(bào)簽名失敗的錯(cuò)

我這邊用的是官方方法請(qǐng)求的,注意要使用POST請(qǐng)求,并且加上UTF-8



請(qǐng)求成功后,返回值會(huì)是這樣的:


成功的返回

如果你的result_code為FAIL,請(qǐng)根據(jù)錯(cuò)誤碼來(lái)尋找哪里的問(wèn)題

這樣你就拿到了prepay_id,可以進(jìn)行調(diào)起微信支付的操作了。


調(diào)起微信支付的代碼

首先,接口的返回值格式是xml的,你需要將他轉(zhuǎn)成字典格式。我用的是開(kāi)源庫(kù)XMLDictionary

返回值里有用的幾個(gè)字段分別是:

appid、prepay_id、mch_id、nonce_str

都是跟自己傳的一一對(duì)應(yīng)的

其他要傳的字段

packge必須寫為Sign=WXPay

timeStamp必須是10位的時(shí)間戳

要傳sign不是返回值里的sign,而是第二次簽名需要生成的sign


第二次簽名的代碼

還是老規(guī)矩,排序然后MD5加密最后加上API商戶密鑰

這樣你就可以成功調(diào)起微信支付啦~


調(diào)起微信支付



我遇到的所有的坑都寫出來(lái)了,如果有其他的問(wèn)題可以留言或者自己根據(jù)錯(cuò)誤代碼來(lái)排查問(wèn)題。

? ? 調(diào)試第三方SDK需要耐心和時(shí)間,同仁們多給點(diǎn)時(shí)間和耐心,相信你一定會(huì)成功~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引言 秋高氣爽,天氣轉(zhuǎn)涼,正是學(xué)習(xí)工作做的好時(shí)候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是個(gè)phper最近在寫微信支付...
    恩就是這個(gè)名閱讀 8,222評(píng)論 2 15
  • 一、背景介紹 作為一名Android開(kāi)發(fā),從最初的跌跌撞撞到現(xiàn)在小有所悟,這其中經(jīng)歷過(guò)的辛酸苦辣也是一種痛并快樂(lè)著...
    freecats08閱讀 5,139評(píng)論 7 54
  • 自己總結(jié)的微信支付寶支付流程和注意點(diǎn): 準(zhǔn)備工作: 需要公司的營(yíng)業(yè)執(zhí)照,稅務(wù)信息,等老板的身份證信息等,我記得,用...
    Www劉閱讀 18,679評(píng)論 2 50
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 【字】~逢 【詞】~萍水相逢 【句】~萍水相逢的水,水枯竭的快嗎? 【文】他和她沒(méi)有故事,雙方都暗暗想聽(tīng)對(duì)方故事而...
    老區(qū)游子閱讀 390評(píng)論 1 2

友情鏈接更多精彩內(nèi)容