创建支付订单
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filemode='a',)
logger = logging.getLogger('')
if __name__ == '__main__':
"""
设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。
"""
alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do'
alipay_client_config.app_id = '[your app_id]'
alipay_client_config.app_private_key = '[your app private key]'
alipay_client_config.alipay_public_key = '[alipay public key]'
"""
得到客户端对象。
注意,一个alipay_client_config对象对应一个DefaultAlipayClient,定义DefaultAlipayClient对象后,alipay_client_config不得修改,如果想使用不同的配置,请定义不同的DefaultAlipayClient。
logger参数用于打印日志,不传则不打印,建议传递。
"""
client = DefaultAlipayClient(alipay_client_config=alipay_client_config, logger=logger)
"""
系统接口示例:alipay.trade.pay
"""
model = AlipayTradePayModel()
model.auth_code = "282877775259787048"
model.body = "Iphone6 16G"
goods_list = list()
goods1 = GoodsDetail()
goods1.goods_id = "apple-01"
goods1.goods_name = "ipad"
goods1.price = 10
goods1.quantity = 1
goods_list.append(goods1)
model.goods_detail = goods_list
model.operator_id = "yx_001"
model.out_trade_no = "20180510AB014"
model.product_code = "FACE_TO_FACE_PAYMENT"
model.scene = "bar_code"
model.store_id = ""
model.subject = "huabeitest"
model.timeout_express = "90m"
model.total_amount = 1
request = AlipayTradePayRequest(biz_model=model)
response_content = None
try:
response_content = client.execute(request)
except Exception as e:
print(traceback.format_exc())
if not response_content:
print("failed execute")
else:
response = AlipayTradePayResponse()
response.parse_response_content(response_content)
print(response.body)
if response.is_success():
print("get response trade_no:" + response.trade_no)
else:
print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
回调验证签名
from alipay.aop.api.util.SignatureUtils import verify_with_rsa
alipay_public_key = '你的支付公钥'
org_message = '返回的body'
message = bytes(org_message, encoding='utf-8')
sign = 'body中截取的sign'
data= verify_with_rsa(alipay_public_key, message, sign)
print(data)
try:
if data.get('trade_status') == 'TRADE_SUCCESS':
order_no = data.get('out_trade_no')
return JSONResponse(status_code=200,
content={'code': 1, 'msg': '支付成功'})
elif data.get('trade_status') in ['TRADE_CLOSED', 'TRADE_FINISHED']:
order_no = data.get('out_trade_no')
return JSONResponse(status_code=200,
content={'code': 1, 'msg': '支付失败'})