微信小程序支付demo,後端使用python

微信小程序支付demo,後端使用python

開發環境 {關注後私信小編 PDF領取十套電子文檔書籍}

  • win10
  • python 2.7.13 (64位)
  • Flask (0.12.2)

線上環境

  • CentOS 6.5
  • python 2.7.13 (64位)
  • Flask (0.12.2)

一: 編寫後端程序

  1. 查看統一下單接口,這裡有兩個地方要注意的。a.在小程序中用戶標識(openid)這個參數是必要,因為trade_type=JSAPI; b.簽名(sign)
  2. 生成簽名(sign)
  3. a. 設置要簽名的參數(注意:要加入openid, 否則會導致簽名錯誤)
data = {
'appid': appid,
'mch_id': mch_id,
'nonce_str': get_nonce_str(),
'body': '測試', # 商品描述
'out_trade_no': str(int(time.time())), # 商戶訂單號
'total_fee': '1',
'spbill_create_ip': spbill_create_ip,

'notify_url': notify_url,
'attach': '{"msg": "自定義數據"}',
'trade_type': trade_type,
'openid': '1111111111111111111111'
}

b. 按照指定的格式排序,拼接商戶key,然後生成md5

stringA = '&'.join(["{0}={1}".format(k, pay_data.get(k))for k in sorted(pay_data)])
stringSignTemp = '{0}&key={1}'.format(stringA, self.merchant_key)
sign = hashlib.md5(stringSignTemp).hexdigest()

c. 簽名校驗工具(如果看不到調試工具請更換瀏覽器內核)

  1. 獲取prepay_id
  2. a. 在上面的data中加入上面生成的md5
data['sign'] = md5

b. 把data字典轉換成xml, 然後通過post方式提交

req = urllib2.Request(url, data, headers={'Content-Type': 'application/xml'})
result = urllib2.urlopen(req, timeout=timeout).read()

c. 得到prepay_id

  1. 生成wx.requestPayment小程序中的paySign簽名 paySign說明文檔

a. 生成參數, 這裡要注意package參數是prepay_id=prepay_id

paySign_data = { 

'appId': appId,
'timeStamp': timeStamp,
'nonceStr': nonceStr,
'package': 'prepay_id={0}'.format(prepay_id),
'signType': 'MD5'
}

b.參考生成簽名步驟,注意:這裡也要拼接商戶key

5.返回wx.requestPayment小程序接口所需參數

6.支付回調通知

a. 微信會以post方式通知服務器,數據類型為xml

b.收到通知後應先對數據進行校驗,然後返回信息給微信, 注意:這裡要以xml方式返回數據

'return_code': 'SUCCESS',
'return_msg': 'OK'

二:編寫小程序

1.新建一個快速項目

2.沒有什麼難的,直接上代碼,通過上面的接口返回小程序所需的參數(提醒:支付接口可以本地測試)

 wx.request({
url: 'http://127.0.0.1:5000/wxpay/pay',
header: {
'content-type': 'application/json'
},
success: function (res) {
wx.requestPayment({

timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.paySign,
'success': function (res) {
console.log(res)
},
'fail': function (res) {
console.log(res)
}
})
}
})


分享到:


相關文章: