微信公众号开发小记——5.python微信红包

描述

有时候产品有这么一些需求,当用户知足必定条件时,给他发必定金额的红包。php

微信各个服务是独立的,比较蛋疼,要用红包功能,首先你须要注册一个微信商户平台帐号。python

代码位置 分支pay-20160802nginx

微信支付比较烦,由于他有本身的加密方式,还要用证书,因此不能用以前sdk的东西,本身随便按照文档封了下加密以及api之类的算法,代码什么的很简单,跟着文档来好了。git

一些须要介绍的东西

接入时最蛋疼的实际上是刚入手不知道证书以及秘钥什么的有啥用,也没看到什么python的前辈仔细介绍过这些东西。github

首先是微信证书,python用的是apiclient_cert.pem,与apiclient_key.pem这两个。web

图片描述

其次是加密时用得api秘钥,文档redis

图片描述

代码讲解

配置算法

WEIXIN_PAY_CERT_FOLDER_PATH = 'cert_folder_path' # 证书文件夹路径
# 四个证书具体路径
WEIXIN_PAY_P12_CERT_PATH = 'apiclient_cert.p12_file_path'
WEIXIN_PAY_CERT_PATH = 'apiclient_cert.pem_file_path'
WEIXIN_PAY_CERT_KEY_PATH = 'apiclient_key.pem_file_path'
WEIXIN_PAY_CA_CERT_PATH = 'rootca.pem_file_path'
WEIXIN_PAY_API_KEY = '' # 微信商户平台api安全中设置的安全码
WEINXIN_PAY_MCH_ID = '' # 微信商户平台id

具体发红包的代码 pay.py数据库

加密发红包没什么好说的,照着文档写就是了,就下面这一句,requests请求是能够带证书的,把微信要的证书给带上。django

respose = requests.post(SENDREDPACK_URL, data=content, headers=headers,
            cert=(settings.WEIXIN_PAY_CERT_PATH, settings.WEIXIN_PAY_CERT_KEY_PATH))

models.py

血坑!!!解决方案请自行考虑

因为是血坑,我已经踩进去了,因此这里用一级标题标识。

并发啊,高并发啊,中国人知道发钱这种事情都是疯子啊,当你丢出一个发钱的连接后,就会有人用fiddler,charles之类的抓包而后干你,数据库太太太慢了,你必定要作好api的调用频次限制,并且这种活动上线后最好把跟主服务的几台机器分开,nginx只把这个活动的东西代过来,频次限制之类的必定要用redis之类的缓存,并且微信会面临红包的各类failed情况,不管微信那边成功失败与否,一次请求就是一次请求,频次限制无视微信那边的返回都要限(不要说用户体验很差,服务器炸了一天的飘过,当整个服务器炸了以后谁还管体验)。

写在最后

微信web开发者工具挺好用的,服务号里把本身加为开发者就能用了。

图片描述

一个nginx例子

例如,我已经有一个web服务,假设web的名字叫作 www.duoduo369.com,这时候80端口已经没了,可是我要接微信服务器,又没有另外的一台机器,这时候用nginx作一下就ok了,首先django加一个url,/weixin_server,建立一个二级域名例如weixin.duoduo369.com,而后nginx把weixin.duoduo369.com的全部请求代到 www.duoduo369.com/weixin_server便可。

upstream your-backend {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
  server_name weixin.yourdomain.com yourdomain.ittun.com;
  location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://your-backend/weixin_server;
  }
}
相关文章
相关标签/搜索