Sha256: 7c80c644ea238487a68623f0362e56d4b58d030d45f516dc6c83b81258aa668a
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
require 'rest_client' require 'active_support/core_ext/hash/conversions' module WxPay module Service GATEWAY_URL = 'https://api.mch.weixin.qq.com/pay' INVOKE_UNIFIEDORDER_REQUIRED_FIELDS = %i(body out_trade_no total_fee spbill_create_ip notify_url trade_type) def self.invoke_unifiedorder(params) params = { appid: WxPay.appid, mch_id: WxPay.mch_id, nonce_str: SecureRandom.uuid.tr('-', '') }.merge(params) check_required_options(params, INVOKE_UNIFIEDORDER_REQUIRED_FIELDS) r = invoke_remote("#{GATEWAY_URL}/unifiedorder", make_payload(params)) yield r if block_given? r end GENERATE_APP_PAY_REQ_REQUIRED_FIELDS = %i(prepayid noncestr) def self.generate_app_pay_req(params) params = { appid: WxPay.appid, partnerid: WxPay.mch_id, package: 'Sign=WXPay', timestamp: Time.now.to_i.to_s }.merge(params) check_required_options(params, GENERATE_APP_PAY_REQ_REQUIRED_FIELDS) params[:sign] = WxPay::Sign.generate(params) params end private def self.check_required_options(options, names) names.each do |name| warn("WxPay Warn: missing required option: #{name}") unless options.has_key?(name) end end def self.make_payload(params) "<xml>#{params.map { |k, v| "<#{k}>#{v}</#{k}>" }.join}<sign>#{WxPay::Sign.generate(params)}</sign></xml>" end def self.invoke_remote(url, payload) r = RestClient::Request.execute( { method: :post, url: url, payload: payload, headers: { content_type: 'application/xml' } }.merge(WxPay.extra_rest_client_options) ) if r WxPay::Result.new Hash.from_xml(r) else nil end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
wx_pay-0.0.4 | lib/wx_pay/service.rb |