#from _typeshed import NoneType
from flask import Flask
from flask import render_template
from flask import request
import hashlib
import requests
import json,time,string,random
import mysql.connector
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
import authorization
from werkzeug.datastructures import Authorization
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
#EncodingASEKey= "eyWcXtHNHbooXV3IRMYWG2z5XsbiHRWaVcQe5xXAbhN"
if __name__ == '__main__':
app.run(debug = True)
# wx.login 处理,获取 CODE --> openID, unionID.
@app.route("/createOrder")
def createOrder(): #微信支付
args = request.args
print(args)
# openid = olkGg5c4QBcPjag5PyLMZ1nIU9RE
openid=request.args.get('openid')
priceAmount = request.args.get('priceAmount')
print(openid)
# 小程序 APP ID
appid = ''
# 小程序 app secret
appsecret = ''
# 商户号
mchid = ''
# 证书 序列号
serial_no = ''
timestamp = str(int(time.time()))
nonce_str=authorization.nonce_str()
timetuple = time.localtime()
time_string = time.strftime("%Y%m%d", timetuple)
# out_trade_no = time_string +openid[0:5]+ authorization.nonce_str(8)
out_trade_no = request.args.get('out_trade_no')
print(out_trade_no)
payload = {
"mchid": mchid,
"out_trade_no": out_trade_no,
"appid": appid,
"description": "支付测试",
"notify_url": "https://pay.qinghansoft.com/notify",
"amount": {
"total": int(priceAmount),
"currency": "CNY"
},
"payer": {
"openid": openid
}
}
# print(payload)
# print(type(payload))
body = json.dumps(payload)
print(body)
# print(type(body))
# print(payload)
print(json.dumps(payload))
print("signature Started")
# print(signature)
print("signature Ended")
# auth= authorization.GetAuthorization(mchid,nonce_str,signature,timestamp,serial_no)
# print(auth)
# print(len(auth))
# URL: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi
# 文档链接: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi'
nonce_str=authorization.nonce_str()
timestamp = str(int(time.time()))
signature=authorization.getSignature(method='POST',urlText='/v3/pay/transactions/jsapi',timestamp=timestamp,nonce=nonce_str,bodyText=body)
# signature=authorization.getSignature(method='GET',urlText='/v3/certificates',timestamp=timestamp,nonce=nonce_str,bodyText='')
print("signature Started")
print(signature)
print("signature Ended")
print(signature)
auth= authorization.GetAuthorization(mchid,nonce_str,signature,timestamp,serial_no)
print(auth)
headers={
'Content-Type':'application/json',
'Accept': 'application/json',
'Authorization': auth
}
r = requests.post(url=url,data=body,headers=headers)
print(r.json())
# print(r.json())
# resJSON= r.json()
# prepay_id=resJSON['prepay_id']
#GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
responseJSON = r.json()
prepay_id = responseJSON['prepay_id']
data = getWxPaymentParam(prepay_id)
return data
@app.route("/cancelOrder")
def cancelOrder():
args = request.args
print(args)
# openid = olkGg5c4QBcPjag5PyLMZ1nIU9RE
openid=request.args.get('openid')
totalPrice=request.args.get('totalPrice')
priceAmount =request.args.get('priceAmount')
id =request.args.get('id')
print(openid)
# appid
appid = ''
# 小程序 app secret
appsecret = ''
# 商户号
mchid = ''
# 证书 序列号
serial_no =''
# qh mchid
# mchid = '1610574923'
# qh serial_no
# serial_no = '3947681FC5E9B7EBE8276712A2A77693F09190B5'
timestamp = str(int(time.time()))
nonce_str=authorization.nonce_str()
timetuple = time.localtime()
time_string = time.strftime("%Y%m%d", timetuple)
# out_trade_no = time_string +openid[0:5]+ authorization.nonce_str(8)
out_trade_no = request.args.get('out_trade_no')
out_refund_no = time_string +openid[0:5]+ authorization.nonce_str(8)
# out_refund_no = request.args.get('out_refund_no')
print(out_trade_no)
payload = {
"out_trade_no": out_trade_no,
"out_refund_no":out_refund_no,
"notify_url": "https://pay.qinghansoft.com/notify",
"amount": {
"refund":int(priceAmount),
"total": int(totalPrice),
"currency": "CNY"
},
}
# print(payload)
# print(type(payload))
body = json.dumps(payload)
# print(body)
# print(type(body))
# print(payload)
# print(json.dumps(payload))
signature=authorization.getSignature(method='POST',urlText='/v3/refund/domestic/refunds',timestamp=timestamp,nonce=nonce_str,bodyText=body)
# print("signature Started")
# print(signature)
# print("signature Ended")
auth= authorization.GetAuthorization(mchid,nonce_str,signature,timestamp,serial_no)
# print(auth)
# print(len(auth))
# URL: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi
# 文档链接: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
url = 'https://api.mch.weixin.qq.com/v3/refund/domestic/refunds'
headers ={
'Content-Type':'application/json',
'Accept': 'application/json',
'Authorization': auth
}
r = requests.post(url=url,data=body,headers=headers)
print(r.json())
# print(r.json())
# resJSON= r.json()
# prepay_id=resJSON['prepay_id']
#GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
responseJSON = (r.json())
# print(type(responseJSON))
# prepay_id = responseJSON['prepay_id']
# data = getWxPaymentParam(responseJSON)
print(responseJSON['status'])
return responseJSON
@app.route("/checkCancel")
def checkCancel():
args = request.args
print(args)
# openid = olkGg5c4QBcPjag5PyLMZ1nIU9RE
openid=request.args.get('openid')
priceAmount = request.args.get('priceAmount')
print(openid)
# 小程序 APP ID
appid = ''
# 小程序 app secret
appsecret = ''
# 商户号
mchid = ''
# 证书 序列号
serial_no = ''
timestamp = str(int(time.time()))
nonce_str=authorization.nonce_str()
timetuple = time.localtime()
time_string = time.strftime("%Y%m%d", timetuple)
# out_trade_no = time_string +openid[0:5]+ authorization.nonce_str(8)
out_trade_no = request.args.get('out_trade_no')
out_refund_no = request.args.get('out_refund_no')
# out_refund_no = request.args.get('out_refund_no')
print(out_refund_no)
url='/v3/refund/domestic/refunds/'+str(out_refund_no)
url2 = 'https://api.mch.weixin.qq.com/v3/refund/domestic/refunds/'+str(out_refund_no)
print(url2)
# print(payload)
# print(type(payload))
# print(body)
# print(type(body))
# print(payload)
# print(json.dumps(payload))
signature=authorization.getSignature(method='GET',urlText=url,timestamp=timestamp,nonce=nonce_str,bodyText='')
# print("signature Started")
# print(signature)
# print("signature Ended")
auth= authorization.GetAuthorization(mchid,nonce_str,signature,timestamp,serial_no)
print(auth)
# print(auth)
# print(len(auth))
headers ={
'Content-Type':'application/json',
'Accept': 'application/json',
'Authorization': auth
}
#查询单笔退款
p = requests.get(url=url2,headers=headers)
print(p.json())
responseJSON = p.json()
print(type(responseJSON))
print(responseJSON['status'])
return responseJSON
@app.route("/getCertificate")
def getCertificate():
# 小程序 APP ID
appid = ''
# 小程序 app secret
appsecret = ''
# 商户号
mchid = ''
# 证书 序列号
serial_no = ''
payload = {
}
nonce_str=authorization.nonce_str()
timestamp = str(int(time.time()))
signature=authorization.getSignature(method='GET',urlText='/v3/certificates',timestamp=timestamp,nonce=nonce_str,bodyText='')
print(signature)
auth= authorization.GetAuthorization(mchid,nonce_str,signature,timestamp,serial_no)
headers={
'Content-Type':'application/json',
'Accept': 'application/json',
'Authorization': auth
}
r = requests.get('https://api.mch.weixin.qq.com/v3/certificates',headers=headers)
#GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
data = dict()
# data = {
# "openid" : 'openid',
# "unionid": '',
# "session_key": 'session_key',
# }
print(r.json())
print(r.text)
return r.json()
#return "Hello CheckSignature"
def getWxPaymentParam(prepay_id):
print(prepay_id)
# xiang le appid
appid = ''
timestamp = str(int(time.time()))
nonce_str=authorization.nonce_str()
package = 'prepay_id=' + str(prepay_id)
paySign = authorization.getPaySign(appId=appid,timestamp=timestamp,nonce=nonce_str,bodyText=package)
data = dict()
data = {
'nonceStr': nonce_str,
'package': package,
'paySign': paySign,
'timeStamp': timestamp,
'signType': 'RSA'
}
return data
@app.route("/getPrepayID")
def getPrepayID():
args = request.args
print(args)
# openid = olkGg5c4QBcPjag5PyLMZ1nIU9RE
openid=request.args.get('openid')
# eventID = request.args.get('eventID')
print(openid)
# 支付参数
# appid = ''
# appsecret = ''
# mchid = ''
# serial_no = ''
#支付参数
# 小程序 APP ID
appid = ''
# 小程序 app secret
appsecret = ''
# 商户号
mchid = ''
# 证书 序列号
serial_no = ''
timestamp = str(int(time.time()))
nonce_str=authorization.nonce_str()
out_trade_no = request.args.get('out_trade_no')
priceAmount = request.args.get('priceAmount')
# 实际付款时需要 X 100. 测试先用 1%金额。
payload = {
"mchid": mchid,
"out_trade_no": out_trade_no,
"appid": appid,
"description": "支付测试",
"notify_url": "https://pay.qinghansoft.com/notify",
"amount": {
"total": priceAmount,
"currency": "CNY"
},
"payer": {
"openid": openid
}
}
print(payload)
print(type(payload))
body = json.dumps(payload)
print(body)
print(type(body))
# print(payload)
# print(json.dumps(payload))
signature=authorization.getSignature(method='POST',urlText='/v3/pay/transactions/jsapi',timestamp=timestamp,nonce=nonce_str,bodyText=body)
print("signature Started")
print(signature)
print("signature Ended")
auth= authorization.GetAuthorization(mchid,nonce_str,signature,timestamp,serial_no)
print(auth)
print(len(auth))
# URL: https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi
# 文档链接: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi'
headers ={
'Content-Type':'application/json',
'Accept': 'application/json',
'Authorization': auth
}
r = requests.post(url=url,data=body,headers=headers)
print(r.json())
# print(r.json())
# resJSON= r.json()
# prepay_id=resJSON['prepay_id']
#GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
responseJSON = r.json()
prepay_id = responseJSON['prepay_id']
return responseJSON
@app.route("/notify", methods=('GET', 'POST'))
def notify():
response = {
"code": "SUCCESS",
"message": "成功"
}
return json.dumps(response)
def get_cursor(cnx):
cursor = cnx.cursor(buffered=True,dictionary=True)
return cursor
flask搭建微信支付和微信退款
于 2023-09-13 13:58:35 首次发布