当前位置: 首页 > 工具软件 > minipay > 使用案例 >

python收银小程序_GitHub - tanjm/minipay: Python实现的小程序支付SDK

马宜民
2023-12-01

Minipay

python版本: python3

安装方法

方法1:下载压缩包,解压

tar -xzvf minipay-x.x.x.tar.gz

cd minipay

python setup.py install

方法2:

pip install minipay

config配置

在项目初始化时,要先加载minipay的配置,如在django中的settings.py中按照以下示例写入配置

from minipay.config import MiniAppsConfig

# 小程序appid

MiniAppsConfig.APP_ID = None

# 商家mch_id

MiniAppsConfig.MCH_ID = None

# 小程序secret

MiniAppsConfig.SECRET = None

# 小程序随机字符串

MiniAppsConfig.NONCE_STR = None

# 小程序KEY,用于解密退款通知

MiniAppsConfig.KEY = None

# 开发者自己的支付通知接口,比如 https://www.xxxx.com/api/notification/payment

MiniAppsConfig.PAYMENT_NOTIFY_URL = None

#开发者自己的退款通知接口,比如 https://www.xxxx.com/api/nitification/refund

MiniAppsConfig.REFUND_NOTIFY_URL = None

# 微信退款需要用到的商户证书,没有配置的话请求退款会出错

# 详情见:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3

# 例如

# CERT = '/appclient.pem'

# CERT_KEY = '/appclient_key.pem'

# 申请退款API需要用到的商户证书本地路径,如要使用申请退款API,必须配置以下两个参数

MiniAppsConfig.CERT = None

MiniAppsConfig.CERT_KEY = None

# 模式。参数值有ignore和store, store则必须提供ORM模型类用来保存请求和响应记录, ignore模式不保存记录

# 该功能目前仅能保证和djangoORM兼容

# 该参数可以在使用minipayAPI的时候再传进去,但是同时需要多加一个models参数,用于传入ORM类

# 具体使用在示例中

MiniAppsConfig.DEFAULT_MODE = 'ignore'

# 默认的ORM模型类,可以到用的时候再填

MiniAppsConfig.DEFAULT_MODEL = None

# 默认请求方法 post or get

MiniAppsConfig.DEFAULT_METHOD = 'post'

API

1 统一下单

import minipay

# 以下三个为必传参数

data = {

"out_trade_no": "2018112312321321",

"body": "XX公司-珍珠奶茶",

"total_fee": "700", # 这里单位是(分) 200=2元

}

unified = minipay.UnifiedOrder(**data)

result = unified.request()

if unified.is_success:

print("请求成功")

elif unified.is_fail:

print("请求失败")

2 订单查询

import minipay

out_trade_no = 'abv2010102333112'

query = minipay.OrderQuery(out_trade_no=out_trade_no)

response = query.request()

if query.is_success:

print(response)

print(query.response_data)

else:

print(query.error)

print(response)

3 关闭订单

import minipay

close_order = minipay.CloseOrder(out_trade_no="abv2010102333112")

close_order.request()

if close_order.is_success:

print(close_order.response_data)

else:

print(close_order.error)

4 申请退款

import minipay

refund_fee = 100

total_fee = 200

refund = minipay.Refund(

out_trade_no="12313123",

total_fee=total_fee,

refund_fee=refund_fee

)

response = refund.request()

if refund.is_success:

pass

else:

pass

5 退款查询

import minipay

# out_trade_no,out_refund_no,transaction_id三选1

query = minipay.RefundQuery(out_trade_no="asdasd")

query.request()

if query.is_success:

pass

else:

pass

6 支付成功通知处理

如果要存储通知(支付和退款的)数据,传入的model需要具备out_trade_no字段,否则会一直当作没有处理,而重复存入记录。

# 支付通知处理

# 微信发过来的是XML格式的数据,直接丢进类里面处理即可

# django 示例

from django.http import HttpResponse

from models.models import PayNotice

import minipay

def payment_notification(request):

notice = minipay.PaymentNotification(

data=request.body,

model=PayNotice,

mode='store'

)

response = notice.handle()

return HttpResponse(response, content_type='application/xml')

7 退款成功通知处理

import minipay

from models.models import RefundNotice

from django.http import HttpResponse

def refund_notification(request):

notice = minipay.RefundNotification(

data=request.body,

model=RefundNotice,

mode='store',

)

response = notice.handle()

return HttpResponse(response, content_type='application/xml')

支持在异步框架中使用

import minipay

async def pay(request):

unified = minipay.UnifiedOrder(out_trade_no=1111, total_fee='12.00', body='test')

response = await unified.arequest()

# ...

BaseMiniPay

BaseMiniPay对象,例如以上的unified、notice、close_order等。有一些属性和方法可以使用。

.request()

发起请求动作,返回*.response_data*,如果请求业务失败,则返回*.error*

.is_success

请求业务是否成功,成功返回True,失败返回False。

.is_fail

请求业务是否失败,是返回True,否返回False。

.response_data

微信端返回的响应内容,为dict类型。

.error

dict类型,当请求失败时,有错误码code键和错误说明desc键。{"code": "", "desc": ""}。

如果请求成功,则为空字典>

.request_data_xml

调用*.request*之后,再调用这个属性。它返回本次请求的内容(xml格式),一般用于在微信签名校验工具

.mini_formatted()

 类似资料: