jasl / wx_pay

An unofficial simple wechat pay gem

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Links in Chinese

Loschcode opened this issue · comments

All your references and links are in Chinese. I don't speak Chinese and try to integrate WechatPay for days. It's a true nightmare.

Could you link the details of how it works / how it should be done in English as you did with your gem ? Thanks.

I totally understand you, Tencent only provides Chinese version of document, but even a Chinese are complicated how to integrate Wechat pay cause their docs suck 😂 .

To integrate with Wechat pay, I think you need a register their open platform and need to verify some materials, Could you describe your situation or progress that let me think how to help you.

The most challenge I think is you need a company that registered in China mainland, Wechat pay need verify your company's material.

I just search Wechat document, they provide overseas version, but docs still Chinese

I didn't expect a reply, so it's very nice of you 😄

Basically we are trying to test a demo payment using invoke_unifiedorder but it returns an error saying the signature is wrong, I tried many work around and to understand how it's generated but nothing worked so far ...

Is there any specific demo credentials I should be aware of ? We also registered an account and all that, but it's the same result 😢

I was looking for any guide step by step and could not find any ...

This is the file so far


  def show

    # required fields
    params = {
      body: 'test',
      out_trade_no: 'jlkkkmlkjtest003',
      total_fee: 1,
      spbill_create_ip: '127.0.0.1',
      notify_url: 'http://making.dev/notify',
      trade_type: 'JSAPI', # could be "JSAPI", "NATIVE" or "APP",
      openid: 'A VALID OPENID FOR OUR TESTING' # required when trade_type is `JSAPI`
    }

    signature = {
      appid: WxPay.appid,
      mch_id: WxPay.mch_id,
      device_info: 1000,
      body: 'test',
      nonce_str: SecureRandom.uuid.tr('-', '')
    }
    # appid:	wxd930ea5d5a258f4f
    # mch_id:	10000100
    # device_info:	1000
    # body:	test
    # nonce_str:	ibuaiVcKdpRxkhJA

    params[:sign] = WxPay::Sign.generate(signature)


    # wechat_username: wx84debd17520da2a3
    # wechat_password: 07e1c9e9e850d3e6b8e0b8a83a9ac0e9
    binding.pry

    # request = WxPay::Service.generate_js_pay_req(params)
    result = WxPay::Service.invoke_unifiedorder(params)

  end

As you can see I tried to hack the signature and find a way to pass this, but nothing worked, the result is {:raw=>{"xml"=>{"return_code"=>"FAIL", "return_msg"=>"签名错误"}}, "return_code"=>"FAIL", "return_msg"=>"签名错误"}

@Loschcode
You don't need to sign signature yourself, wx_pay should handle this in make_payload , you can see it's will ignore your passed sign.

Could you tell me why you need to hack the signature? if necessary I will refactor to support you do this

I see that now, but it doesn't matter the return_msg is always the same 签名错误 as I tried it out again ... Do you have any idea what's going on there ?

@Loschcode
That means the signature is invalid, the most possibility is wrong config, you need to check these:

  • remember, Wechat Pay MUST test on production server
  • check configurations on Wechat Pay site, like your website host url, pid, secret, etc.
  • check wx_pay config has set equal to Wechat Pay site's