golang·微信小程序微信支付v3 服务端发起微信预支付交易单请求
1】项目下终端加载微信官方包: go get -u github.com/wechatpay-apiv3/wechatpay-go
2】必须需要有 [商户号、商户证书序列号、商户APIv3密钥、微信小程序Appid、个人微信付款者微信Openid] 五项
http://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal 可以获取 商户号、商户证书序列号、商户APIv3密钥(下载apiclient_key.pem项目本地);
3】Golang 发起支付请求 微信预支付交易单源码
// 发起支付请求 微信预支付交易单
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 ""
}