微信h5支付python版
微信H5支付Python版
最近闲暇,整理下微信支付,根据官方文档进行的。
官方配置文件
这里就不多说了,直接进入代码部分。
Tornado框架
感觉方便快捷,所以就用这个整理处理一份。Tornado是一个轻量级的Web框架,支持异步I/O和多线程。
文档结构
进入、处理、回调需要配置3个URL就能搞定了。
0、配置文件首先,我们需要配置微信支付的基本信息,如商户ID、密钥等。我们使用Tornado的`config`模块来存储这些信息。
```pythonimport tornado.webfrom tornado import genclass Config(tornado.web.Config):
def __init__(self, kwargs):
super().__init__()
self.mch_id = kwargs.get('mch_id')
self.api_key = kwargs.get('api_key')
```
1、进入页面用户点击支付按钮后,会跳转到微信的H5支付页面。我们需要配置一个URL来处理这个请求。
```pythonclass EnterHandler(tornado.web.RequestHandler):
@gen.coroutine def get(self):
获取用户信息和订单信息 user_info = self.get_argument('user_info')
order_info = self.get_argument('order_info')
构造支付参数 params = {
'mch_id': self.config.mch_id,
'nonce_str': str(uuid.uuid4()),
'body': '测试订单',
'total_fee':1,
'notify_url': self.config.notify_url,
'trade_type': 'H5'
}
构造微信支付请求 wechat_params = {
'appid': self.config.appid,
'partnerid': self.config.mch_id,
'package': 'Sign=WXPay',
'noncestr': params['nonce_str'],
'timestamp': str(int(time.time())),
'sign_type': 'HMAC-SHA256',
'pay_sign': self.get_pay_sign(params)
}
返回微信支付页面 self.redirect(' CallbackHandler(tornado.web.RequestHandler):
@gen.coroutine def post(self):
获取回调参数 params = self.get_argument('params')
验证签名 if not self.verify_sign(params):
return 处理支付结果 result = self.handle_pay_result(params)
返回结果 self.write(result)
```
3、处理支付结果当用户完成支付后,我们需要处理支付结果,例如更新订单状态等。
```pythonclass PayResultHandler(tornado.web.RequestHandler):
@gen.coroutine def get(self):
获取订单ID order_id = self.get_argument('order_id')
更新订单状态 self.update_order_status(order_id)
返回结果 self.write({'result': 'success'})
```
以上就是微信H5支付Python版的基本流程。需要注意的是,微信支付的配置文件和回调参数需要根据官方文档进行调整。
完整代码
以下是完整的代码:
```pythonimport tornado.webfrom tornado import genimport uuidimport timeclass Config(tornado.web.Config):
def __init__(self, kwargs):
super().__init__()
self.mch_id = kwargs.get('mch_id')
self.api_key = kwargs.get('api_key')
class EnterHandler(tornado.web.RequestHandler):
@gen.coroutine def get(self):
获取用户信息和订单信息 user_info = self.get_argument('user_info')
order_info = self.get_argument('order_info')
构造支付参数 params = {
'mch_id': self.config.mch_id,
'nonce_str': str(uuid.uuid4()),
'body': '测试订单',
'total_fee':1,
'notify_url': self.config.notify_url,
'trade_type': 'H5'
}
构造微信支付请求 wechat_params = {
'appid': self.config.appid,
'partnerid': self.config.mch_id,
'package': 'Sign=WXPay',
'noncestr': params['nonce_str'],
'timestamp': str(int(time.time())),
'sign_type': 'HMAC-SHA256',
'pay_sign': self.get_pay_sign(params)
}
返回微信支付页面 self.redirect(' CallbackHandler(tornado.web.RequestHandler):
@gen.coroutine def post(self):
获取回调参数 params = self.get_argument('params')
验证签名 if not self.verify_sign(params):
return 处理支付结果 result = self.handle_pay_result(params)
返回结果 self.write(result)
class PayResultHandler(tornado.web.RequestHandler):
@gen.coroutine def get(self):
获取订单ID order_id = self.get_argument('order_id')
更新订单状态 self.update_order_status(order_id)
返回结果 self.write({'result': 'success'})
```
以上就是微信H5支付Python版的完整代码。需要注意的是,微信支付的配置文件和回调参数需要根据官方文档进行调整。
参考文献
* 微信支付官方文档: Tornado框架官方文档: Python语言官方文档: