编写支付程序通常涉及以下步骤:
服务器端处理订单:
生成订单信息,并调用支付平台的API。
生成签名:
对订单信息进行签名,确保交易的安全性。
客户端发起支付:
客户端接收到服务器返回的支付信息后,发起支付请求。
支付宝支付示例
import hashlib
import requests
from flask import Flask, request, jsonify
from xml.etree import ElementTree as ET
from alipay import AliPay
from alipay.utils import AliPayConfig
app = Flask(__name__)
配置应用私钥和支付宝公钥
app_private_key_string = open("./应用私钥2048.txt").read()
alipay_public_key_string = open("./支付宝公钥.txt").read()
初始化支付宝对象
alipay = AliPay(
appid="27616",
app_notify_url=None,
app_private_key_string=app_private_key_string,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2"
)
生成订单
def make_order_body(order_info):
body = ET.Element("xml")
for key, value in order_info.items():
e = ET.SubElement(body, key)
e.text = value
return ET.tostring(body, encoding="utf-8")
创建签名
def sign(order_info, key):
stringA = "&".join(["%s=%s" % (k, order_info.get(k, "")) for k in sorted(order_info)])
stringSignTemp = "%s&key=%s" % (stringA, key)
return hashlib.sha256(stringSignTemp.encode("utf-8")).hexdigest()
模拟生成订单并发起支付
@app.route("/pay", methods=["POST"])
def pay():
order_info = {
"subject": "测试商品",
"out_trade_no": "",
"total_amount": "0.01",
"product_code": "QUICK_MSECURITY_PAY"
}
order_body = make_order_body(order_info)
order_info["sign"] = sign(order_info, "your_app_private_key")
发起支付请求
response = alipay.api_alipay_trade_page_pay(
out_trade_no=order_info["out_trade_no"],
total_amount=order_info["total_amount"],
subject=order_info["subject"],
return_url="http://return_url",
notify_url="http://notify_url",
body=order_body
)
return jsonify(response)
if __name__ == "__main__":
app.run()
微信支付示例