module WeixinPay::Pay
Constants
- API_BASE_URL
- API_MICRPAY_URL
- API_ORDERQUERY_URL
- INVOKE_MICRPAY_REQUIRED_FIELDS
Public Class Methods
micrpay(params={})
click to toggle source
# File lib/weixin_pay/pay.rb, line 11 def self.micrpay(params={}) params = { appid: WeixinPay.appid, mch_id: WeixinPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', ''), time_expire: Time.now.since(1.minutes).strftime("%Y%m%d%H%M%S") }.merge(params) # TODO check_required_params(params, INVOKE_MICRPAY_REQUIRED_FIELDS) remote_params = params.merge(sign: WeixinPay::Sign.generate(params)) xml = make_xml(remote_params) post_pay(API_MICRPAY_URL, xml) end
orderquery(params={})
click to toggle source
# File lib/weixin_pay/pay.rb, line 26 def self.orderquery(params={}) params = { appid: WeixinPay.appid, mch_id: WeixinPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) # TODO check_required_params(params, INVOKE_MICRPAY_REQUIRED_FIELDS) remote_params = params.merge(sign: WeixinPay::Sign.generate(params)) xml = make_xml(remote_params) post_pay(API_ORDERQUERY_URL, xml) end
Private Class Methods
check_required_params(params, names)
click to toggle source
# File lib/weixin_pay/pay.rb, line 96 def self.check_required_params(params, names) names.each do |name| warn("WeixinPay Warn: missing required option: #{name}") unless params.has_key?(name) end end
make_xml(params)
click to toggle source
提交刷卡支付 <xml>
<appid>wx2421b1c4370ec43b</appid> <attach>订单额外描述</attach> <auth_code>120269300684844649</auth_code> <body>刷卡支付测试</body> <device_info>1000</device_info> <goods_tag></goods_tag> <mch_id>10000100</mch_id> <nonce_str>8aaee146b1dee7cec9100add9b96cbe2</nonce_str> <out_trade_no>1415757673</out_trade_no> <spbill_create_ip>14.17.22.52</spbill_create_ip> <time_expire></time_expire> <total_fee>1</total_fee> <sign>C29DB7DB1FD4136B84AE35604756362C</sign>
</xml> 查询订单 <xml>
<appid>wx2421b1c4370ec43b</appid> <mch_id>10000100</mch_id> <nonce_str>ec2316275641faa3aacf3cc599e8730f</nonce_str> <transaction_id>1008450740201411110005820873</transaction_id> <out_trade_no>2008450740201411110005820874</out_trade_no> <sign>FDD167FAA73459FD921B144BAF4F4CA2</sign>
</xml>
# File lib/weixin_pay/pay.rb, line 84 def self.make_xml(params) xml_body = params.map do |k, v| "<#{k}>#{v}</#{k}>" end.join("\n") xml = <<-xml_str <xml> #{xml_body} </xml> xml_str xml end
post_pay(url, xml)
click to toggle source
# File lib/weixin_pay/pay.rb, line 42 def self.post_pay(url, xml) Rails.logger.info url Rails.logger.info xml result = RestClient::Request.execute({ method: :post, url: url, payload: xml, headers: { content_type: 'application/xml' } }.merge(WeixinPay.extra_rest_client_options)) if result WeixinPay::Result.new Hash.from_xml(result) else nil end end