前台代码忽略
需要了解flask 框架 尤其是 模板传参 和重定向 传参
###############################################《《各种需要用到的函数 不涉及到流程##############################
import hashlib
import time
import requests
from collections import OrderedDict
from random import Random
from bs4 import BeautifulSoup
import lxml
import requests
import json
APP_ID = '' # 公众账号appid
MCH_ID = '' # 商户号
API_KEY = '' # 微信商户平台(pay.weixin.qq.com) -->账户设置 -->API安全 -->密钥设置,设置完成后把密钥复制到这里
APP_SECRECT = ''
UFDODER_URL = '
https://api.mch.weixin.qq.com/pay/unifiedorder
' # url是微信下单api 这个不用改
NOTIFY_URL = '' # 微信支付结果回调接口,需要你自定义
CREATE_IP = '' # 你服务器上的ip
# 生成随机字符串
def random_str(randomlength=8):
"""
生成随机字符串
:param randomlength: 字符串长度
:return:
"""
str = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str += chars[random.randint(0, length)]
return str
# 生成随机字符串 和上面的一样 这是我用来自定义订单号流水号的 out_trade_no
def random_num(randomlength=10):
"""
生成随机字符串
:param randomlength: 字符串长度
:return:
"""
str = ''
chars = '1234567890'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str += chars[random.randint(0, length)]
str_time=time.strftime("%Y%m%d%H%M%S", time.localtime())
return str_time+str
def get_sign(data_dict, key): #这里是用 字典+key MD5加密 第一次用到 是用于 生成预支付订单 第二次用到 是用于接收微信支付成功验证
# 签名函数,参数为签名的数据和密钥
params_list = sorted(data_dict.items(), key=lambda e: e[0], reverse=False) # 参数字典倒排序为列表
params_str = "&".join(u"{}={}".format(k, v) for k, v in params_list) + '&key=' + key
# 组织参数字符串并在末尾添加商