文章内容

2023/5/25 9:41:47,作 者: 黄兵

Payssion 支付代码片段

下面是一个 Payssion 支付的代码片段,现在已经不用,公开出来,方便有需要的开发者。

class PayssionUtil(object):
def __init__(self):
self._url = current_app.config['PAYSSION_URL']
self._api_key = current_app.config['PAYSSION_API_KEY']
self._secret_key = current_app.config['PAYSSION_SECRET_KEY']

def alipay_create_order(self, sum_price, pm_id):
"""
创建交易订单,具体文档地址:https://sandbox.payssion.com/cn/docs/#api-reference-payment-request
:param sum_price:支付金额
:param pm_id:支付方式id
:return:当数据请求到WEB服务API地址时,响应为json格式。
"""
url = f"{self._url}/api/v1/payment/create"
order_id = 'nybXhP4A992eS5k45p2vaYQ66528ARW83Z28Bg4h96QAdgG3'
if current_app.config['ENV'] == 'development' or current_app.config['ENV'] == 'testing':
# 测试和开发环境 pm_id 不同
pm_id = 'payssion_test'
api_sig = self.crate_paysion_api_sig(pm_id=pm_id, amount=sum_price, order_id=order_id)
payload = {"api_key": self._api_key, "pm_id": pm_id, "amount": sum_price,
"currency": "USD", "description": "购买号码付款", "order_id": order_id, "api_sig": api_sig}
response = requests.post(url=url, data=payload)
return response

def crate_paysion_api_sig(self, pm_id, amount, order_id):
"""
创建交易签名api_sigapi签名),具体文档可参考此处:https://sandbox.payssion.com/cn/docs/#api-reference-api-signature
:param pm_id:支付方式id,具体代码可以参考:https://sandbox.payssion.com/cn/docs/#api-reference-pm-id
:param amount:付款金额
:param order_id:订单编号
:return:api_sig
"""
sig_str = f"{self._api_key}|{pm_id}|{amount}|USD|{order_id}|{self._secret_key}"
m = hashlib.md5()
m.update(sig_str.encode('utf-8'))
api_sig = m.hexdigest()
return api_sig

def create_notify_sig(self, pm_id, amount, order_id, state):
"""
生成异步通知签名 notify_sig,用于校验支付结果
:param pm_id:支付方式id,具体代码可以参考:https://sandbox.payssion.com/cn/docs/#api-reference-pm-id
:param amount:付款金额
:param order_id:订单编号
:param state:支付状态,具体参考:https://sandbox.payssion.com/cn/docs/#api-reference-payment-state
:return:notify_sig
"""
# api_key|pm_id|amount|currency|order_id|state|secret_key
sig_str = f"{self._api_key}|{pm_id}|{amount}|USD|{order_id}|{state}|{self._secret_key}"
m = hashlib.md5()
m.update(sig_str.encode('utf-8'))
notify_sig = m.hexdigest()
return notify_sig


这些代码是对文档的一些具体实现,关于文档地址,上面的注释已经写的很清楚了。

同时也实现了 sig 的加密,如果有任何问题,欢迎下面留言讨论。

分享到:

发表评论

评论列表