Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Zlib::DataError: incorrect header check #113

@caiguanhao

Description

@caiguanhao

可能是部分微信服务器升级了,现在执行 invoke_unifiedorder 等方法有几率会报 Zlib::DataError: incorrect header check 错误。

/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:382 → inflate
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:382 → block in inflate_adapter
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/protocol.rb:497 → call_block
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/protocol.rb:488 → <<
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/protocol.rb:163 → read
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:405 → read
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:293 → block in read_body_0
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:264 → inflater
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:283 → read_body_0
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:204 → read_body
/GEM_ROOT/gems/rest-client-2.1.0/lib/restclient/request.rb:739 → block (2 levels) in transmit
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http.rb:1518 → block in transport_request
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http/response.rb:165 → reading_body
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http.rb:1517 → transport_request
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http.rb:1479 → request
/GEM_ROOT/gems/airbrake-9.4.5/lib/airbrake/rails/net_http.rb:7 → block in request
/GEM_ROOT/gems/airbrake-9.4.5/lib/airbrake/rack.rb:21 → capture_timing
/GEM_ROOT/gems/airbrake-9.4.5/lib/airbrake/rails/net_http.rb:6 → request
/GEM_ROOT/gems/rest-client-2.1.0/lib/restclient/request.rb:471 → net_http_do_request
/GEM_ROOT/gems/rest-client-2.1.0/lib/restclient/request.rb:733 → block in transmit
/home/deploy/.rbenv/versions/2.6.4/lib/ruby/2.6.0/net/http.rb:920 → start
/GEM_ROOT/gems/rest-client-2.1.0/lib/restclient/request.rb:727 → transmit
/GEM_ROOT/gems/rest-client-2.1.0/lib/restclient/request.rb:163 → execute
/GEM_ROOT/gems/rest-client-2.1.0/lib/restclient/request.rb:63 → execute
/GEM_ROOT/gems/wx_pay-0.21.0/lib/wx_pay/service.rb:587 → invoke_remote
/GEM_ROOT/gems/wx_pay-0.21.0/lib/wx_pay/service.rb:78 → invoke_unifiedorder

应该是 RestClient 的问题,我暂时用 httprb 解决了

def self.invoke_refund(params, options = {})
  params = {
    appid: options.delete(:appid) || WxPay.appid,
    mch_id: options.delete(:mch_id) || WxPay.mch_id,
    key: options.delete(:key) || WxPay.key,
    nonce_str: SecureRandom.uuid.tr('-', ''),
  }.merge(params)
  params[:op_user_id] ||= params[:mch_id]
  options = {
    ssl_context: OpenSSL::SSL::SSLContext.new.tap do |ctx|
      ctx.set_params(
        cert: options.delete(:apiclient_cert) || WxPay.apiclient_cert,
        key:  options.delete(:apiclient_key) || WxPay.apiclient_key,
      )
      # ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
  }.merge(options)
  WxPay::Result.new(Hash.from_xml(invoke_remote('/secapi/pay/refund', make_payload(params), options)))
end

def self.invoke_remote(url, payload, options = {})
  gateway_url = options.delete(:gateway_url) || GATEWAY_URL
  url = "#{gateway_url}#{url}"
  options[:body] = payload
  HTTP.timeout(5).headers(content_type: 'application/xml').post(url, options).to_s
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions