WeChat Alipay scan code payment function python implementation

Alipay payment function realized

Installation package

pip install alipay-sdk-python

pip install qrcode

Code

import qrcode
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.domain.AlipayTradePrecreateModel import AlipayTradePrecreateModel
from alipay.aop.api.domain.AlipayTradeQueryModel import AlipayTradeQueryModel
from alipay.aop.api.domain.AlipayFundTransUniTransferModel import AlipayFundTransUniTransferModel
from alipay.aop.api.request.AlipayTradePrecreateRequest import AlipayTradePrecreateRequest
from alipay.aop.api.request.AlipayTradeQueryRequest import AlipayTradeQueryRequest
from alipay.aop.api.request.AlipayFundTransUniTransferRequest import AlipayFundTransUniTransferRequest
from alipay.aop.api.domain.Participant import Participant
url = 'https://openapi.alipay.com/gateway.do' # Alipay gateway
alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = url
alipay_client_config.app_id = '' # application id
alipay_client_config.app_private_key = '' # Application private key
alipay_client_config.alipay_public_key = '' # Alipay public key
client = DefaultAlipayClient(alipay_client_config=alipay_client_config)
model = AlipayTradePrecreateModel()
model.out_trade_no = '20220812052469' # recharge number
model.total_amount = 20.0 # recharge amount
model.subject = "Recharge"
model.body = "Recharge"
model.timeout_express = '5m'
request_info = AlipayTradePrecreateRequest(biz_model=model)
response = client.execute(request_info)
qr_code = json.loads(response)['qr_code']
qrcode_name = os.path.join(os.getcwd(), 'upload', 'img_code', '{}.png'.format(out_trade_no))
if not os.path.exists(os.path.join(os.getcwd(), 'upload', 'img_code')):
    os.makedirs(os.path.join(os.getcwd(), 'upload', 'img_code'))
img = qrcode.make(qr_code)
with open(qrcode_name, 'wb') as f:
    img.save(f)

Realization of WeChat code scanning payment function

import random
from Cryptodome.PublicKey import RSA
from Cryptodome.Signature import pkcs1_15
from Cryptodome.Hash import SHA256
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from base64 import b64encode
# get signature
def get_sign(sign_str):
    # certificate path
    apiclient_key = os.path.join('wxpay', 'apiclient_key.pem')
    rsa_key = RSA.importKey(open(apiclient_key).read())
    signer = pkcs1_15.new(rsa_key)
    digest = SHA256.new(sign_str.encode('utf8'))
    sign = b64encode(signer.sign(digest)).decode('utf-8')
    return sign
timestamp = str(int(time.time()))
number_list = [str(num) for num in range(10)]
letter_list = [chr(i) for i in range(97, 123)]
letter_upper_list = [chr(i).upper() for i in range(97, 123)]
all_list = number_list + letter_list + letter_upper_list
random.shuffle(all_list)
nonce_str = ''.join(random.choices(all_list, k=32)) # random number list
url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/native' #payment interface gateway
serial_no = '' # certificate serial number
mchid = '' # merchant id
data = {
    "mchid": '' #Merchant id ,
    "out_trade_no": '202208115469782' # recharge number,
    "appid": '', # application id
    "description": "Recharge", # Recharge content introduction
    "notify_url": '', # WeChat payment interface callback
    "amount": {
        "total": int(float(200)*100), # in minutes
        "currency": "CNY"
    }
}
sign_str = '\n'.join([
    "POST", # HTTP request method
    url.split(urlparse(url).netloc)[-1],  # path+args
    timestamp, # timestamp
    nonce_str, # request random string
    json.dumps(data), '' # request message body
])
sign = get_sign(sign_str)
headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'WECHATPAY2-SHA256-RSA2048 mchid="{}",nonce_str="{}",signature="{}",timestamp="{}",serial_no="{}"'.format(mchid, nonce_str, sign, timestamp, serial_no)
}
res = requests.post(url, data=json.dumps(data), headers=headers)
code_url = res.json()['code_url']
qrcode_name = os.path.join(os.getcwd(), 'upload', 'img_code', '{}.png'.format(out_trade_no))
if not os.path.exists(os.path.join(os.getcwd(), 'upload', 'img_code')):
    os.makedirs(os.path.join(os.getcwd(), 'upload', 'img_code'))
img = qrcode.make(code_url)
# Save the QR code
with open(qrcode_name, 'wb') as f:
    img.save(f)

WeChat top-up query:

mchid = '' # merchant id
number_list = [str(num) for num in range(10)]
letter_list = [chr(i) for i in range(97, 123)]
letter_upper_list = [chr(i).upper() for i in range(97, 123)]
all_list = number_list + letter_list + letter_upper_list
random.shuffle(all_list)
nonce_str = ''.join(random.choices(all_list, k=32)) # 32 random codes
url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/'
serial_no = '' # security certificate serial number
query_url = r'{}{}?mchid={}'.format(url, out_trade_no, mchid)
sign_str = '{}\n{}\n{}\n{}\n{}\n'.format(
    "GET", # HTTP request method
    query_url.split(urlparse(query_url).netloc)[-1],
    timestamp, # timestamp
    nonce_str, # request random string
    ''
)
sign = get_sign(sign_str)
headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'WECHATPAY2-SHA256-RSA2048 mchid="{}",nonce_str="{}",signature="{}",timestamp="{}",serial_no="{}"'.format(mchid, nonce_str, sign, timestamp, serial_no)
}
res = requests.get(query_url, headers=headers)
trade_state = res.json()['trade_state']
if trade_state == 'SUCCESS':
    print('recharge successful')

Alipay recharge query:

alipay_client_config = AlipayClientConfig()
alipay_client_config.server_url = '' #Alipay gateway
alipay_client_config.app_id = '' # Alipay application id
alipay_client_config.app_private_key = '' # Alipay application private key
alipay_client_config.alipay_public_key = '' # Alipay application public key
client = DefaultAlipayClient(alipay_client_config=alipay_client_config)
model = AlipayTradeQueryModel()
model.out_trade_no = out_trade_no # order number
request_info = AlipayTradeQueryRequest(biz_model=model)
response = client.execute(request_info)
msg = json.loads(response)['msg']
if msg == 'Success':
    if json.loads(response)['trade_status'] == 'TRADE_SUCCESS':
        print('recharge successful')

Guess you like

Origin blog.csdn.net/jiulinghouxiao/article/details/126303983