12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright 2021 Tencent Inc. All rights reserved.
- package app
- import (
- "context"
- "fmt"
- "strconv"
- "time"
- "git.nanodreamtech.com/sg/wechatpay-go/core"
- "git.nanodreamtech.com/sg/wechatpay-go/utils"
- )
- // PrepayWithRequestPaymentResponse 预下单ID,并包含了调起支付的请求参数
- type PrepayWithRequestPaymentResponse struct {
- // 预支付交易会话标识
- PrepayId *string `json:"prepayId"` // revive:disable-line:var-naming
- // 商户号
- PartnerId *string `json:"partnerId"` // revive:disable-line:var-naming
- // 时间戳
- TimeStamp *string `json:"timeStamp"`
- // 随机字符串
- NonceStr *string `json:"nonceStr"`
- // 订单详情扩展字符串
- Package *string `json:"package"`
- // 签名
- Sign *string `json:"sign"`
- }
- // PrepayWithRequestPayment APP支付下单,并返回调起支付的请求参数
- func (a *AppApiService) PrepayWithRequestPayment(
- ctx context.Context,
- req PrepayRequest,
- ) (resp *PrepayWithRequestPaymentResponse, result *core.APIResult, err error) {
- prepayResp, result, err := a.Prepay(ctx, req)
- if err != nil {
- return nil, result, err
- }
- resp = new(PrepayWithRequestPaymentResponse)
- resp.PrepayId = prepayResp.PrepayId
- resp.TimeStamp = core.String(strconv.FormatInt(time.Now().Unix(), 10))
- nonce, err := utils.GenerateNonce()
- if err != nil {
- return nil, nil, fmt.Errorf("generate request for payment err:%s", err.Error())
- }
- resp.NonceStr = core.String(nonce)
- resp.Package = core.String("Sign=WXPay")
- message := fmt.Sprintf("%s\n%s\n%s\n%s\n", *req.Appid, *resp.TimeStamp, *resp.NonceStr, *prepayResp.PrepayId)
- signatureResult, err := a.Client.Sign(ctx, message)
- if err != nil {
- return nil, nil, fmt.Errorf("generate sign for payment err:%s", err.Error())
- }
- resp.Sign = core.String(signatureResult.Signature)
- resp.PartnerId = core.String(signatureResult.MchID)
- return resp, result, nil
- }
- func (o PrepayWithRequestPaymentResponse) String() string {
- var ret string
- if o.PrepayId == nil {
- ret += "PrepayId:<nil>, "
- } else {
- ret += fmt.Sprintf("PrepayId:%v, ", *o.PrepayId)
- }
- if o.PartnerId == nil {
- ret += "PartnerId:<nil>, "
- } else {
- ret += fmt.Sprintf("PartnerId:%v, ", *o.PartnerId)
- }
- if o.TimeStamp == nil {
- ret += "TimeStamp:<nil>, "
- } else {
- ret += fmt.Sprintf("TimeStamp:%v, ", *o.TimeStamp)
- }
- if o.NonceStr == nil {
- ret += "NonceStr:<nil>, "
- } else {
- ret += fmt.Sprintf("NonceStr:%v, ", *o.NonceStr)
- }
- if o.Package == nil {
- ret += "Package:<nil>, "
- } else {
- ret += fmt.Sprintf("Package:%v, ", *o.Package)
- }
- if o.Sign == nil {
- ret += "Sign:<nil>"
- } else {
- ret += fmt.Sprintf("Sign:%v", *o.Sign)
- }
- return fmt.Sprintf("PrepayResponse{%s}", ret)
- }
|