本文實例為大家分享了python銀聯(lián)支付和支付寶支付接入的具體代碼,供大家參考,具體內容如下

前置條件:需要安裝Python的OpenSSL模塊,我使用的版本是16.1.0,可以使用pip install pyopenssl來安裝
一、支付寶支付
1. 使用RSA公鑰加密系統(tǒng)進行簽名和簽名驗證,需要自己生成一個RSA私鑰和對應的一個RSA公鑰(在Linux下可以使用ssh-keygen命令來生成),公鑰需要上傳至支付寶,供支付寶對開發(fā)者發(fā)送的請求做簽名驗證使用;而同時支付寶會提供一個RSA公鑰給開發(fā)者,開發(fā)者使用這個公鑰來驗證支付寶的回調請求的合法性。
2. 整個接入過程最核心的工作就是構建一個合法的請求報文,這個可以參考支付寶的相關文檔;其次是對請求報文的內容進行RSA簽名,并將簽名隨請求報文一并發(fā)送。
核心的簽名和報文構建代碼如下:
import OpenSSL
import json
import time
import urllib
import base64
from django.conf import settings
def build_sign(param_map, sign_type="RSA"):
'''
Doc: https://doc.open.alipay.com/doc2/detail.htm?treeId=200&articleId=105351&docType=1
'''
# 將篩選的參數(shù)按照第一個字符的鍵值ASCII碼遞增排序(字母升序排序),如果遇到相同字符則按照第二個字符的鍵值ASCII碼遞增排序,以此類推。
sort_param = sorted([(key, unicode(value, settings.ALIPAY_CHARSET).encode(settings.ALIPAY_CHARSET)) for key, value in param_map.iteritems()], key=lambda x: x[0])
# 將排序后的參數(shù)與其對應值,組合成“參數(shù)=參數(shù)值”的格式,并且把這些參數(shù)用&字符連接起來,此時生成的字符串為待簽名字符串。SDK中已封裝簽名方法,開發(fā)者可直接調用,詳見SDK說明。
# 如自己開發(fā),則需將待簽名字符串和私鑰放入SHA1 RSA算法中得出簽名(sign)的值。
content = '&'.join(['='.join(x) for x in sort_param])
return base64.encodestring(OpenSSL.crypto.sign(settings.ALIPAY_APP_PRIVATE_KEY_OBJ, content, 'sha1'))
def build_params(out_trade_no, subject, body, total_amount):
'''
Doc:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.MVkRGo&treeId=193&articleId=105465&docType=1
將參數(shù)按照支付寶規(guī)定組織并簽名之后,返回
'''
params = {}
# 獲取配置文件
params['app_id'] = settings.ALIPAY_APPID
params['method'] = settings.ALIPAY_METHOD
params['format'] = settings.ALIPAY_FORMAT
params['charset'] = settings.ALIPAY_CHARSET
params['sign_type'] = settings.ALIPAY_SIGN_TYPE
params['sign_type'] = settings.ALIPAY_SIGN_TYPE
params['timestamp'] = time.strftime('%Y-%m-%d %H:%M:%S')
params['version'] = settings.ALIPAY_VERSION
params['notify_url'] = settings.ALIPAY_NOTIFY_URL
# 業(yè)務參數(shù)
params['biz_content'] = {}
params['biz_content']['body'] = body # 訂單描述、訂單詳細、訂單備注,顯示在支付寶收銀臺里的“商品描述”里
params['biz_content']['subject'] = subject # 商品的標題/交易標題/訂單標題/訂單關鍵字等。
params['biz_content']['out_trade_no'] = out_trade_no # 商戶網站唯一訂單號
params['biz_content']['total_amount'] = '%.2f' % (float(total_amount) / 100) # 訂單總金額,單位為元,精確到小數(shù)點后兩位,取值范圍[0.01,100000000]
params['biz_content']['product_code'] = settings.ALIPAY_APP_PRODUCT_CODE
params['biz_content'] = json.dumps(params['biz_content'], separators=(',', ':'))
params['sign'] = build_sign(params)
return urllib.urlencode(params)
def check_sign(message, sign):
'''Doc: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.dDRpeK&treeId=204&articleId=105301&docType=1'''
try:
OpenSSL.crypto.verify(settings.ALIPAY_PUBLIC_KEY_OBJ, sign, message, 'SHA1')
return True
except Exception as _:
return False
當前名稱:python實現(xiàn)銀聯(lián)支付和支付寶支付接入-創(chuàng)新互聯(lián)
當前路徑:http://chinadenli.net/article2/epeoc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站排名、小程序開發(fā)、云服務器、域名注冊、虛擬主機、網站設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容