使用 Elixir 實(shí)現(xiàn)微信支付

??【2017-08-07 更新】
最新版本 v0.3.1 做了比較大的修改,請(qǐng)查看最新的文檔:https://hexdocs.pm/wechat_pay/getting-started.html

最近用 Phoenix 在開(kāi)發(fā)「時(shí)習(xí)」的時(shí)候,有個(gè)需求是需要實(shí)現(xiàn)在微信內(nèi)的支付系統(tǒng),發(fā)現(xiàn) Elixir 還沒(méi)有現(xiàn)成的包,goofansu 的 wechat-elixir 也還未實(shí)現(xiàn)支付功能,于是鼓搗出了 https://github.com/linjunpop/wechat_pay

目前支持公眾號(hào)支付,掃碼支付,App 支付。

一個(gè)公眾號(hào)支付的例子

先使用統(tǒng)一下單接口創(chuàng)建微信訂單:

{:ok, data} = WechatPay.API.PlaceOrder.request({
  device_info: "WEB",
  body: "Wechat-666",
  attach: nil,
  out_trade_no: "1415757673",
  fee_type: "CNY",
  total_fee: 709,
  spbill_create_ip: "127.0.0.1",
  notify_url: "http://example.com/wechat-pay-callback",
  time_start: 20091225091010,
  time_expire: 20091227091010,
  trade_type: "JSAPI",
  openid: "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
})

然后使用 WechatPay.HTML.generate_pay_request(data["prepay_id"]) 來(lái)生成 pay request:

%{
  "appId" => "wx2421b1c4370ec43b",
  "timeStamp" => "1395712654",
  "nonceStr" => "e61463f8efa94090b1f366cccfbbb444",
  "package" => "prepay_id=u802345jgfjsdfgsdg888",
  "signType" => "MD5",
  "paySign" => "70EA570631E4BB79628FBCA90534C63FF7FADD89"
 }

然后在客戶端使用生成的 pay request 來(lái)調(diào)用 JavaScript 的接口,就可以向用戶收錢啦,如下圖:

IMG_1708.PNG

除了公眾號(hào)支付外的其他功能都是依據(jù)文檔實(shí)現(xiàn),未在 production 的 app 里測(cè)試,如有問(wèn)題,歡迎反饋。

最后再吐槽下微信:

  • 文檔說(shuō)所有的 API 都有 sandbox 環(huán)境,但是事實(shí)并非如此,發(fā)郵件咨詢之后也不了了之。
  • sandbox 環(huán)境下的 sign 值不會(huì)根據(jù)提交數(shù)據(jù)的 appid 來(lái)計(jì)算,而永遠(yuǎn)是一個(gè)無(wú)法匹配的值,官方也沒(méi)有給出一個(gè)測(cè)試可用的 appid 和 appkey,這樣 sandbox 環(huán)境也沒(méi)有實(shí)用意義
  • 「交易保障」接口文檔里寫的提交數(shù)據(jù)需要的字段是 execute_time,然而實(shí)際請(qǐng)求服務(wù)器要求的字段名卻是 execute_time_,末尾多了一個(gè)莫名的下劃線,發(fā)郵件咨詢后說(shuō)會(huì)修改,然而到現(xiàn)在還是一樣。╮(╯_╰)╭
最后編輯于
?著作權(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)容

  • 很早前就想了解下微信公眾號(hào)開(kāi)發(fā),懶和拖延癥讓這計(jì)劃遲遲沒(méi)落實(shí),正巧新項(xiàng)目有了微信公眾號(hào)的業(yè)務(wù),我心中沒(méi)數(shù)地回應(yīng),我...
    英文名叫夏天閱讀 4,688評(píng)論 1 4
  • 該文僅對(duì)于中間這種支付方式有參考價(jià)值喲 一、開(kāi)發(fā)背景 在微信公眾號(hào)中,需要進(jìn)行微信支付且為微信公眾號(hào)網(wǎng)頁(yè)支付。 二...
    英文名叫夏天閱讀 2,009評(píng)論 0 7
  • 自己總結(jié)的微信支付寶支付流程和注意點(diǎn): 準(zhǔn)備工作: 需要公司的營(yíng)業(yè)執(zhí)照,稅務(wù)信息,等老板的身份證信息等,我記得,用...
    Www劉閱讀 18,682評(píng)論 2 50
  • 銀聯(lián)支付,支付寶支付,微信支付的三大總結(jié),之前也有寫過(guò)兩篇。 微信支付,支付寶支付,銀聯(lián)支付——三大支付總結(jié): h...
    LucasAdam閱讀 5,087評(píng)論 2 23
  • 炙熱的南風(fēng) 吹走了春天的消息 火苗 將殘留的枯寂 狠狠的燒烤 滿地的灰燼 四散揚(yáng)去 一直孤獨(dú)的大雁 再也飛不動(dòng)了 ...
    冷冬年閱讀 307評(píng)論 0 2

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