task: 完成支付宝共享基础(迁移/WechatConfig/PaymentStore/pkg/alipay)

This commit is contained in:
2026-05-22 12:09:55 +08:00
parent 2768deb0b6
commit 53e95751b1
13 changed files with 342 additions and 4 deletions

47
pkg/alipay/wap.go Normal file
View File

@@ -0,0 +1,47 @@
package alipay
import (
"context"
"fmt"
"time"
"github.com/smartwalle/alipay/v3"
"github.com/break/junhong_cmp_fiber/internal/model"
)
// BuildWapPayURL 生成支付宝手机网站支付 URL。
// payment.PaymentNo 作为 out_trade_nopayment.Amount转为元字符串
// payment.ExpireAt 若非空则转换为支付宝 TimeExpire 格式yyyy-MM-dd HH:mm
// 返回签名后的完整 WAP 支付 URLqr_link 与 copy_link 可使用同一个 URL。
func BuildWapPayURL(ctx context.Context, cfg *model.WechatConfig, payment *model.Payment, subject string) (string, error) {
client, err := NewClientFromConfig(cfg)
if err != nil {
return "", err
}
totalAmount := FenToYuan(payment.Amount)
param := alipay.TradeWapPay{
Trade: alipay.Trade{
NotifyURL: cfg.AliNotifyURL,
ReturnURL: cfg.AliReturnURL,
Subject: subject,
OutTradeNo: payment.PaymentNo,
TotalAmount: totalAmount,
ProductCode: "QUICK_WAP_WAY",
},
}
// 设置支付链接过期时间
if payment.ExpireAt != nil && payment.ExpireAt.After(time.Now()) {
param.TimeExpire = payment.ExpireAt.Format("2006-01-02 15:04")
}
payURL, err := client.TradeWapPay(param)
if err != nil {
return "", fmt.Errorf("生成支付宝 WAP 支付链接失败: %w", err)
}
return payURL.String(), nil
}