三分鐘python搭建支付寶三方支付

2022-09-21 16:57:15 字數 4159 閱讀 1315

目錄

再沒有三方支付平台之前,使用者發起支付請求的時候,使用者要去和銀行簽約(轉賬),特別的不方便,為了解決這些問題,就有了三方支付,三方平台去完成簽約,給使用者節省時間。

商戶拿到支付寶的公鑰、自己的私鑰(私鑰加密、公鑰解密),用私鑰請求支付寶,支付寶解密、驗籤、進行支付處理,支付寶將處理的返回值傳給商戶,當支付成功後,返還給商戶訂單號、金額、時間戳等訊息,支付失敗後同樣給商戶反饋結果。

支付寶開放平台:

登入支付寶開放平台–>點選控制台

點選沙箱(複製appid)

點選文件,找到開發助手,點選**加密。

獲取私鑰

點選應用公鑰

生成公鑰

現在已經拿到了需要的公鑰。

構建支付類

from datetime import datetime

from crypto.publickey import rsa

from crypto.signature import pkcs1_v1_5

from crypto.hash import sha256

from urllib.parse import quote_plus

from base64 import decodebytes, encodebytes

import json

class alipay:

"""支付寶支付介面(pc端支付介面)

"""def __init__(self, appid, app_notify_url, app_private_key_path,

alipay_public_key_path, return_url, debug=false):

self.appid = appid

self.app_notify_url = app_notify_url

self.app_private_key_path = app_private_key_path

self.app_private_key = none

self.return_url = return_url

with open(self.app_private_key_path) as fp:

self.app_private_key = rsa.importkey(fp.read())

self.alipay_public_key_path = alipay_public_key_path

with open(self.alipay_public_key_path) as fp:

self.alipay_public_key = rsa.importkey(fp.read())

if debug is true:

self.__gateway = ""

else:

self.__gateway = ""

def direct_pay(self, subject, out_trade_no, total_amount, return_url=none, **kwargs):

biz_content =

biz_content.update(kwargs)

data = self.build_body("alipay.trade.page.pay", biwww.cppcns.comz_content, self.return_url)

return self.sign_data(data)

def build_body(self, method, biz_content, return_url=none):

data =

if return_url is not none:

data["notify_url"] www.cppcns.com= self.app_notify_url

data["return_url"] = self.return_url

return data

def sign_data(self, data):

data.pop("sign", none)

unsigned_items = self.ordered_data(data)

unsigned_string = "&".join("=".format(k, v) for k, v in unsigned_items)

sign = self.sign(unsigned_stringwww.cppcns.com.encode("utf-8"))

quoted_string = "&".join("=".format(k, quote_plus(v)) for k, v in unsigned_items)

signed_string = quoted_string + "&sign=" + quote_plus(sign)

return signed_string

def ordered_data(self, data):

complex_keys =

for key, value in data.items():

if isinstance(value, dict):

complex_keys.append(key)

for key in complex_keys:

data[key] = json.dumps(data[key], separators=(',', ':'))

return sorted([(k, v) for k, v in data.items()])

def sign(self, unsigned_string):

key = self.app_private_key

signer = pkcs1_v1_5.new(key)

signature = signer.sign(sha256.new(unsigned_string))

sign = encodebytes(signature).decode("utf8").replace("\n", "")

return sign

def _verify(self, raw_content, signature):

key = self.alipay_public_key

signer = pkcs1_v1_5.new(key)

digest = sha256.new()

digest.update(raw_content.encode("utf8"))

if signer.verify(digest, decodebytes(signature.encode("utf8"))):

return true

return false

def verify(self, data, signature):

if "sign_type" in data:

data.pop("sign_type")

unsigned_items = self.ordered_data(data)

message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)

return self._verify(message, signature)

例項化類

def init_alipay():

# 初始化alipay

alipay = alipay(

appid="appid",

app_notify_url="**位址",

return_url="**位址",

app_private_key_path="私鑰相對路徑",

alipay_public_key_path="公鑰相對路徑",

debug=true # 支付環境

)return alipay

apiasync def get(self):

alipay = init_alipay()

# 傳乙個標題 訂單號 訂單**

params = alipay.direct_pay("三方廣告平台", order_no, money)

url = f"?"

return self.write(ret_json(url))

# 構建乙個**位址,用於支付成功後**,在**位址中可以獲取訂單號(out_trade_no)、金額(total_amount)、時間戳(timestamp),然後進行處理業務邏輯。

支付包有自己的介面文件,以上是我在python環境下配置的,可以直接使用

沉默三分鐘

網上見此真情之文,藉以自表 原文 http www.hecaitou.net p 3018 沉默三分鐘是心祭。那麼多年了,國旗終於為平民而降。那麼多天了,全民哀悼終於實現。與此同時,火炬停止傳遞,因為這不是乙個歡慶的時刻。很多年後回顧2008年,我 也許寧可它從日曆中消失。還沒有哪一年和今年一樣,才...

三分鐘搞定python基礎

庫的匯入和新增 在機器學習和人工智慧為主導的工業4.0時代,python猶如一股龍捲風襲捲著一切。python作為一門解釋性的物件導向的語言雖然在運算速度上有不足,但是相比於程式運算速度,程式專案開發速度更為重要,而且在在這個裝備氪金時代,運算速度的缺憾完全可以拿硬體來補,何況python還支援並行...

《每天感恩三分鐘》

每天感恩三分鐘 有位104歲的老太太耳聰目明,老而彌堅。有人向她請教長壽秘訣,老太太笑了 我有一帖靈丹妙藥,那就是每天化三分鐘時間感恩。她說,化一分鐘感恩父母 丈夫 兒女 鄰居和陌生人 一分鐘感恩大自然給予的種種關懷和體貼 一分鐘感恩每乙個祥和 溫暖和快樂的日子 感恩使她心裡永遠流淌著幸福的泉水,有...