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')