微信企业支付的过程
访问量: 2390
注意的点:
1. 每天每个人最多10次. (这个可以在后台修改)
2. 每次最少发一块钱.
3. 发送间隔: 最少15秒一次.
4. 所有请求都使用post, 参数使用xml, 登陆后台使用 微信商户平台.
5. 每个微信公众平台的 "服务号" 都对应一个 微信商户平台的 "商户号". 务必是一一对应! app_id 存在于公众账号中, 商户id 在两个平台都可以看到, 商户的key 在商户平台中. 首次需要手动设置.
6. 需要下载4个"证书", 在商户平台中可以下载. 下载后,对于非php语言, 有一个p12文件发起https post请求就足够了.
7. 签名的话, 使用 wx_pay 这个gem 的WxPay::Service.send :make_payload, params 和 generate sign
参考: https://pay.weixin.qq.com/wiki/doc/api/index.html
企业支付官方文档: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
1. 使用 wx_pay
2. 问好你的微信"商户平台"中的几个设置项:
2.1 商户id ( 在商户平台上的id )
2.2 appid 就是微信公众账号的 ID (目前我卡到这里了)
2.3 key . ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )
3. 下载 p12, pem等证书. 在发送 http post请求的时候使用( p12? )
class Interface::PaymentsController < Interface::ApplicationController include HTTParty # 这里很重要, 访问ssl链接时, 需要加上这个 p12文件. pkcs12 File.read(File.join(Rails.root, 'apiclient_cert.p12')), Settings.wechat.mch_id # /interface/payments/pay? def pay params = { :mch_appid => Settings.wechat.app_id, :mchid => Settings.wechat.mch_id, :nonce_str => '5K8264ILTKCH16CQ2502SI8ZNMTM67VS', :partner_trade_no => '2016-12-03-001', :openid => 'oGNA3vw0n7_7wI13gFiC-63Y-eDU', :check_name => 'NO_CHECK', :amount => 101, :desc => '卖场抽奖返利', :spbill_create_ip => '123.57.184.82' } # 这个方法很重要,可以根据 hash 生成xml, 并且躲过了生成md5 sign的过程. xml_body = WxPay::Service.send :make_payload, params Rails.logger.info "== xml_body: #{xml_body}" # 这里使用post请求 response = self.class.post Settings.wechat.pay_url, :body => xml_body Rails.logger.info "== response: #{response}" end
返回的请求的结果可读性很强. 可以根据信息来调试.
可以来这里调试你的MD5 签名是否正确: https://pay.weixin.qq.com/wiki/tools/signverify/
另外, 还需要有一些nginx的配置:
server { listen 80; server_name choujiangweb.ccoymc.com; charset utf-8; location / { root /opt/app/chou_jiang_web/current/public; # proxy_pass http://chou_jiang_web_servers; # proxy_redirect default; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header Host $http_host; # proxy_next_upstream http_502 http_504 error timeout invalid_header; } location ~ ^/assets/ { root /opt/app/chou_jiang_web/current/public; expires 1y; add_header Cache-Control public; add_header ETag ""; break; } location /MP_verify_ { root /opt/app/chou_jiang_web/current/public; expires 1y; add_header Cache-Control public; add_header ETag ""; break; } }