golang·微信小程序微信支付v3 服务端发起微信预支付交易单请求

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 ""
}
1,154 Views
分享你的喜爱
linwute
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注