golang发起 微信预支付交易单 提交报错 “Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》” 怎么解决?官方文档不明确,有例子吗?
// 微信预支付交易单
func getWeChatOrderPay() interface{} {
url := "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi"
jsonStr := []byte(`{
"mchid": "直连商户号",
"out_trade_no": "商户自己订单号",
"appid": "应用ID",
"description": "商品名称商品名称",
"notify_url": "支付结果通知的回调地址",
"amount": {
"total":100,
"currency": "CNY"
},
"payer": {
"openid":"用户标识唯一openid"
}
}`)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
if err != nil {
log.Println("微信预支付交易单 byte异常:", err)
}
req.Header.Set("Authorization", "WECHATPAY2-SHA256-RSA2048")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{} //发起请求
resp, err := client.Do(req)
if err != nil {
log.Println("微信预支付交易单 POST异常:", err)
}
defer resp.Body.Close()
statusCode := resp.StatusCode
//head := resp.Header
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
fmt.Println("状态码:", statusCode)
//fmt.Println("请求头:", head)
return string(body)
/* ============================ */
// mchid 直连商户号
// out_trade_no 商户自己订单号
// appid 应用ID
// description 商品描述
// notify_url 支付结果通知的回调地址
// amount:{ //订单金额信息
// total: //总金额 //单位为分
// currency:CNY //货币类型
// }
// payer:{ //支付者信息 用户标识唯一openid
// openid
// }
}
最后解决办法
// 发起支付请求 微信预支付交易单 // 项目下终端加载微信官方包 go get -u github.com/wechatpay-apiv3/wechatpay-go func GetWeChatOrderPay() interface{} { var ( mchID string = "160*****" // 商户号 mchCertificateSerialNumber string = "321*****" // 商户证书序列号 mchAPIv3Key string = "0de*****" // 商户APIv3密钥 ) // 使用 utils 提供的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名 mchPrivateKey, err := utils.LoadPrivateKeyWithPath("/golang/wechat/cert/apiclient_key.pem(商户APIv3密钥文件路径)") if err != nil { log.Println("微信预支付交易单 加载商家私钥错误:", err) } ctx := context.Background() // 使用商户私钥等初始化 client,并使它具有自动定时获取微信支付平台证书的能力 opts := []core.ClientOption{ option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key), } client, err := core.NewClient(ctx, opts...) if err != nil { log.Println("微信预支付交易单 新微信支付客户端出错 :", err) } svc := jsapi.JsapiApiService{Client: client} // 得到prepay_id,以及调起支付所需的参数和签名 resp, result, err := svc.PrepayWithRequestPayment(ctx, jsapi.PrepayRequest{ Appid: core.String("wxf77****"), //微信小程序id Mchid: core.String("16*******"), //商户号 Description: core.String("自定义订单商品名称"), //商品名称 OutTradeNo: core.String("自定义订单id"), //自定义商品订单id Attach: core.String("自定义数据说明"), NotifyUrl: core.String("https://www.****"), //自定义支付成功反馈地址 Amount: &jsapi.Amount{ Total: core.Int64(100), }, Payer: &jsapi.Payer{ Openid: core.String("oNE*****"), //支付者微信id }, }, ) if err == nil { log.Println("微信预支付交易单 调起支付得到prepay_id resp错误: ", resp) } else { log.Println("微信预支付交易单 调起支付得到prepay_id 错误: ", err) } log.Println("微信预支付交易单 调起支付得到prepay_id 数据结果: \n", result) return "" }
去用这个sdkhttps://github.com/wechatpay-apiv3/wechatpay-go