Python實現支付寶當面付之 掃碼支付

2022-05-14 19:23:34 字數 4625 閱讀 2532

一:配置資訊準備

登入螞蟻金服開放平台:

開發資料閱讀:

建立好應用,配置好金鑰等資訊後,就可以開發了。

二:開發支付寶支付工具類

1:相關配置資訊

#

*****===支付相關配置資訊**********=

alipay_input_charset = '

utf-8'#

商戶id,以2088開頭的16位純數字

alipay_partner = '

2088************'#

服務商支付寶賬號

alipay_seller_email = ''

#支付結果**位址

alipay_notify_url = "

商家後台**介面位址"#

訪問模式,根據自己的伺服器是否支援ssl訪問,若支援請選擇https;若不支援請選擇http

簽名加密方式

sign_type = "

sha-1"#

應用id

************'#

下單api

precreate_gateway="

"

2:三個輔助函式:

#

1:生成下單請求引數字串

defmake_payment_request(self,params_dict):

"""構造支付請求引數

:param params_dict:

:return:

"""query_str = self.params_to_query(params_dict,) #

拼接引數字串

sign = self.make_sign(query_str) #

生成簽名

sign = urllib.quote(sign, safe='') #

解決中文引數編碼問題

res = "

%s&sign=%s

" %(query_str, sign)

return

res

defparams_to_query(self,params):

"""生成需要簽名的字串

:param params:

:return:

""""""

:param params:

:return:

"""query = ""

dict_items ={}

for key, value in

params.items():

if isinstance(value, dict) ==true:

dict_items[key] =value

params[key] = "%s"

all_str = ''

for key in

sorted(params.keys()): #把引數按key值排序:這是支付寶下單請求的引數格式規定

all_str = all_str + '

%s=%s&

' %(key, params[key])

all_str = all_str.rstrip('&'

) biz_content_dict = dict_items['

biz_content']

content_str = ''

for key in

sorted(biz_content_dict.keys()):

if isinstance(biz_content_dict[key], basestring) ==true:

content_str = content_str + '

"%s":"%s",

' %(key, biz_content_dict[key])

else

: content_str = content_str + '

"%s":%s,

' %(key, biz_content_dict[key])

content_str = content_str.rstrip(','

) content_str = '

'query = all_str %content_str

return

query

defmake_sign(self,para_str):

"""生成簽名

:param message:

:return:

"""private_key =openssl.crypto.load_privatekey(openssl.crypto.filetype_pem, open(

'./路徑/private_key.txt

').read()) #

把私鑰存到乙個檔案裡,載入出來【嘗試過用rsa模組的方法載入私鑰字串,會報格式錯誤。檢視原始碼得知,需要從檔案流載入】

import

sys reload(sys)

sys.setdefaultencoding(

'utf-8

') #

這三句:解決簽名方法編碼報錯

sign = base64.encodestring(openssl.crypto.sign(private_key, para_str, '

sha256'))

return sign

3:下單

#

獲取***url

def getalipayurl(self,orderid,goodsname,goodsprice,**kwargs):

#構建公共引數

params ={}

params[

'method

'] = '

alipay.trade.precreate

'params[

'version

'] = '

1.0'

params[

' params[

'timestamp

'] = datetime.now().strftime('

%y-%m-%d %h:%m:%s')

params[

'charset

'] =self.alipay_input_charset

params[

'notify_url

'] =self.alipay_notify_url

params[

'sign_type

'] = '

rsa2'#

構建訂單引數

biz_content ={}

biz_content[

'out_trade_no

'] = orderid #

訂單號 biz_content['

subject

'] = goodsname #

商品名 biz_content['

total_amount

'] = goodsprice #

** params['

biz_content

'] =biz_content

#由引數,生成簽名,並且拼接得到下單引數字串

encode_params =self.make_payment_request(params)

#下單url = self.precreate_gateway +encode_params

response =requests.get(url)

#提取下單響應

body =response.text

#解析下單響應json字串

body_dict =json.loads(body)

return_msg = body_dict['

alipay_trade_precreate_response

']['

msg'

]

if return_msg == "

success":

code_url = body_dict['

alipay_trade_precreate_response

']['

qr_code']

return

code_url

else

:

print

"fail msg**********===

" + return_msg

四:在controller端,編寫支付結果**函式

def aliqrcodenotify(self, request, *args,**kwargs):

out_trade_no = kwargs.get("

out_trade_no")

trade_status = kwargs.get("

trade_status")

#根據trade_status,判斷交易結果:交易成功 or 交易關閉

#根據out_trade_no 更新訂單記錄資訊

五:客戶端輪詢

python支付 Python對接支付寶支付自實現

python python開發 python語言 python對接支付寶支付自實現 python對接支付寶支付自實現 coding utf 8 import base64 import json import urllib.parse from datetime import datetime im...

python呼叫支付寶SDK API

使用openssl openssl生成私鑰 生成公鑰 官方 pip install alipay sdk python 第三方 pip install python alipay sdk 解決 pip uninstall alipay sdk python pip uninstall python ...

需求 10 支付寶 銀聯接入

記錄一下支付寶 銀聯接入的蛋疼坑 ios9以後要全面支援arm64架構,所以公升級sdk 的時候發現報的錯誤是 為了確認一下,使用lipo 命令 確定了的確是版本舊不支援架構。更換好sdk發現蛋疼的問題來了!報這個錯誤!明顯是路徑錯誤,網上一搜,被這個問題折磨的小夥伴們也真是不少。而我更是蛋疼,因為...