微信h5支付python版

15

微信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语言官方文档:

支付微信h5

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 java微信支付v3系列——5.微信支付成功回调

下一篇 微信小程序中 会话内消息卡片上的send-message-title在不同手机上的显示问题