Back

微信企业支付的过程

发布时间: 2016-12-03 07:56:00

注意的点: 

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;
  }
}

Back