調用第三方平臺(支付寶)支付總結

趁着剛把支付寶功能完工,這裏我來總結一下。前端

一.老版:mapi網關產品密鑰demo

payment 支付表

名稱 類型 描述
user_id integer 用戶ID
payment_no string 支付單號(支付的時候生成一個惟一的支付單號)
transaction_no string 流水號(支付寶返回的惟一流水號)
status string 支付狀態('sucess'成功, 'fail'失敗,default:'initial'未支付)
total_money decimal 支付總金額
payment_at datetime 付款時間
raw_response text 支付寶返回的原始數據結果集

訂單表增長如下字段

名稱 類型 描述
payment_id integer 對應的支付記錄id
status string 訂單狀態(是不是付款成功,default:'initial'未支付)

官方文檔強制要求提交到支付寶的請求參數

pay_options = {
      "service" => 'create_direct_pay_by_user',
      "partner" => ENV['ALIPAY_PID'],
      "seller_id" => ENV['ALIPAY_PID'],
      "payment_type" => "1",
      "notify_url" => ENV['ALIPAY_NOTIFY_URL'],
      "return_url" => ENV['ALIPAY_RETURN_URL'],
      "anti_phishing_key" => "",
      "exter_invoke_ip" => "",
      "out_trade_no" => payment.payment_no,
      "subject" => "xx商品購買",
      "total_fee" => payment.total_money,
      "body" => "xx商品購買",
      "_input_charset" => "utf-8",
      "sign_type" => 'MD5',
      "sign" => ""
}

二: 新版:開放平臺密鑰

老版的時候寫的demo是進行md5進行加密,比較簡單,在新版中,須要採用RSA密鑰。數據庫

支付寶需求和原理:express

  • 1.需求:移動端app須要在原先支持微信支付的基礎上外增長支付寶支付。
  • 支付寶支付原理: 1.移動端sdk攜帶支付寶請求參數去請求支付寶,支付寶接受參數後,用配置的公鑰和咱們請求的私鑰進行比對 2.比對成功以後,給咱們響應參數。咱們在獲取支付寶響應參數以後,經過走回調方法來把支付寶響應的信息進行驗籤比對,比對成功以後來更新咱們的數據庫。 備註: 移動端支付咱們採用的是異步,經過notify_url來回調。pc端通常是同步,直接獲取到響應參數。

RSA密鑰驗籤流程: 支付寶會要求咱們本身生成RSA的公鑰和私鑰,而後開發平臺支付寶也會生成的一對這樣的密鑰,咱們本身生成的和支付寶生成的須要交換彼此的公鑰,咱們利用本身生成的密鑰對數據進行加密,而後拿到支付平臺生成的公鑰,再對彼此的私鑰進行驗證。json

實現步驟:api

  • 下載本地私鑰,本地生成工具生成私鑰
  • 把本身的生成的商戶公鑰在支付寶配置項中進行配置
  • 構造支付寶須要的請求參數
  • 對請求數據進行簽名
  • 對支付寶返回的通知參數進行驗籤處理,更改數據庫操做

給前端返回(加密後):微信

app_id=2020012345678&method=alipay.trade.page.pay&charset=utf-8&version=1.0&timestamp=2017-12-06+16%3A54%3A14&notify_url=http%3A%2F%2Fmallbear.com%2Fapi%2Fmobile%2Ftrades%2F4952%2Falipay_return&sign_type=RSA&biz_content=%7B%22out_trade_no%22%3D%3E%2220171206115444TNCWK%22%2C+%22subject%22%3D%3E%2220171206115444TNCWK%22%2C+%22timeout_express%22%3D%3E%2224h%22%2C+%22total_amount%22%3D%3E227.0%2C+%22product_code%22%3D%3E%22QUICK_MSECURITY_PAY%22%7D&sign=wSLRgh%2BRcHUYA4FIeOm73TRvvqsK%2F6TApMNjgJ3uqqo%2BMK%2BLIjIpqulSE5kIJ7%2BWLScGh9M9N8NmK3dD4BAlWnfaSai2H1Rgsb8eSD%2By1g5BRhnRIt6MlNkKwucEUnlKO1kR5rsZAEAVoowxOqT1HFUvrJLsr%2BeOJp6dnEeyfo8%3D

實際操做中須要注意的點總結: 1. 在構建支付寶請求參數的時候,須要先把biz_content轉換成json格式,而後把請求參數進行加密提交,把支付寶返回的參數中的簽名和(本地的公鑰+支付寶返回的參數)生成的簽名進行校驗比對 2. 驗籤的時候,用的是支付寶提供的公鑰,每64個字符要換行 3. 獲取請求參數的時候去掉無用的參數app

params.except(*request.path_parameters.keys)
相關文章
相關標籤/搜索