微信公衆號開發小記——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;
  }
}
相關文章
相關標籤/搜索