正文
因为最近自己在支付小程序,所以在这里简单介绍一下用python支付小程序的流程。 当然建议在进行开发之前先阅读具体流程,清楚支付的过程。
1 .支付往来流程
当然具体参数配置请参考官方文档https://pay.weixin.QQ.com/wiki/doc/API/wxa/wxa _ API.PHP? chapter=7_ 3索引=1
2 .获取OpenID (微信用户id )
导入请求
来自配置导入应用程序id,SECRET
classopenidutils(object ) :
def __init__(self,jscode ) :
self.URL=' https://API.weixin.QQ.com/SNS/jscode2session '
self.appid=APPID #小程序id
请不要与self.secret=SECRET #后付款的key混淆
self.jscode=jscode #前端返回的动态jscode
efget_openid(self ) :
# url请务必连接。 无法使用参与方法
url=self.url '? appid=' self.appid ' secret=' self.secret ' js _ code=' self.jscode ' grant _ type=authorization _ code '
r=requests.get(URL )
打印(r.JSON ) )
OpenID=r.JSON ([ ' OpenID ' ] return OpenID
3 .报销申请
#-* -编码: utf-8-* -
导入请求
import hashlib
导入xmlto dict
导入时间
导入随机
导入字符串
import urllib2
导入系统
class WX_PayToolUtil () :
微信支付工具“”
def_init_(self,APP_ID,MCH_ID,API_KEY,NOTIFY_URL ) :
self._APP_ID=APP_ID #小程序ID
self._MCH_ID=MCH_ID # #商户编号
self._API_KEY=API_KEY
self._ ufd oder _ URL=' https://API.mch.weixin.QQ.com/pay/unified order ' #接口链接
self._NOTIFY_URL=NOTIFY_URL #异步通知
defgenerate_sign(self,param ) :
“”生成签名“”
stringA=' '
ks=sorted(Param.keys ) )
#参数排序
for k in ks:
Stringa=(k'='Param[k] ' ) )
#城市建设商户KEY
stringsigntemp=stringa ' key=' self._ API _ key
# md5加密也可以是其他方式
hash _ MD5=hash lib.MD5 (stringsigntemp.encode (' utf8 ' ) )
sign=hash_md5.hexdigest ().upper ) ) )。
返回签名
''''
# python2的另一种实现方法
def generate _ sign (自,参数) :
ret=[]forkinsorted(Params.keys () ) :
if(k!='sign ' ) and(k!=' ' ) and(Params[k]isnotnone ) :
ret.append('%s=%s'% ) k,params[k] )
params_str=''.join(ret )
Params_str='%(Params_str ) skey=% ) Partner_key ) s ' % { ' params _ str ' : params _ str,' Partner_}
重新加载(sys ) )。
sys.set default编码(utf8 ) )。
params _ str=hash lib.MD5 (params _ str.encode (' utf-8 ' ).hexdigest () ) )。
sign=params_str.upper (
返回签名
''''
defgetpayurl(self,orderid,openid,goodsPrice,**kwargs ) :
向“”微信支付端发出请求,获取url“”