Julia调用微信支付(app支付)

倒腾了几天一直报签名错误,后来通过微信官方提供的签名验证工具,发现是julia的SHA包有问题,hmac_sha算出来的结果根本就不对……作者也没更新,于是直接换成Nettle,用另一个包的加密算法得到了正确哈希值
但依然签名错误,这里要注意一点,第一波签名所用到的key,并不是appsecret,而是在微信商户平台上自行设置的key
https://pay.weixin.qq.com/index.php/core/cert/api_cert
搞定了这个之后就签名通过了,然后返回一堆参数,再签名一次传给app就行了

using Nettle
appsecret_hasher    = HMACState("sha256",apicertpasswd)   # 这里用了hmac_sha256方法,并非默认值,需要在参数中说明。MD5我没跑通
function appsecret_sign(x)
  update!(appsecret_hasher,x)
  return hexdigest!(appsecret_hasher)
  end
function wxsign(dic_nosign::Dict,apicertpasswd::String,toxml::Bool=false)
  prepay_data   = sort(collect(dic_nosign),by=x->x[1])
  prepay_str    = join( map(x->x[1]*"="*string(x[2]),prepay_data), "&" ) * "&key=" * apicertpasswd
  sign_str      = uppercase(appsecret_sign(prepay_str))
  if toxml
    push!(prepay_data,"sign"=>sign_str)
    prepay_str    = ""
    for p in prepay_data
      k,v         = p[1],string(p[2])
      prepay_str *= "<$k>"*v*""
      end
    prepay_str   *= ""
    return prepay_str
  else
    dic_nosign["sign"]  = sign_str
    return dic_nosign   # signed
  end
  end

除了签名用到的key需要测试核实,其他参数都比较好找,照着微信官方文档的示例值来就行,在开放平台管理中心都能找到

你可能感兴趣的:(Julia调用微信支付(app支付))