refactor: use gopay as alipay

This commit is contained in:
zchengo
2023-01-27 11:02:30 +08:00
parent 59734922d1
commit a7d7ddb1bc
2 changed files with 73 additions and 18 deletions
+59
View File
@@ -0,0 +1,59 @@
package common
import (
"context"
"crm/global"
"net/http"
"strconv"
"time"
"github.com/go-pay/gopay"
"github.com/go-pay/gopay/alipay"
"github.com/go-pay/gopay/pkg/xlog"
)
type Alipay struct {
}
func GetAlipay() *Alipay {
return &Alipay{}
}
func (a *Alipay) PagePay(tradeNo string, totalAmount float64) (string, error) {
bm := make(gopay.BodyMap)
bm.Set("subject", "服务订阅").
Set("out_trade_no", tradeNo).
Set("total_amount", totalAmount).
Set("timeout_express", "2m")
payUrl, err := global.Alipay.TradePagePay(context.Background(), bm)
if err != nil {
if bizErr, ok := alipay.IsBizError(err); ok {
xlog.Errorf("%+v", bizErr)
return "", err
}
xlog.Errorf("client.TradePay(%+v),err:%+v", bm, err)
return "", err
}
return payUrl, nil
}
func (a *Alipay) VerifySign(req *http.Request) gopay.BodyMap {
notifyReq, err := alipay.ParseNotifyToBodyMap(req)
if err != nil {
xlog.Error(err)
return nil
}
// 支付宝异步通知验签(公钥模式)
if _, err = alipay.VerifySign(global.Config.Alipay.AlipayPublicCert, notifyReq); err != nil {
xlog.Error(err)
return nil
}
return notifyReq
}
func (a *Alipay) GenTradeNo() string {
return time.Now().Format("20060102150405") + strconv.Itoa(RandInt(100000, 999999))
}
+14 -18
View File
@@ -4,31 +4,27 @@ import (
"crm/global"
"log"
"github.com/smartwalle/alipay/v3"
"github.com/go-pay/gopay"
"github.com/go-pay/gopay/alipay"
"github.com/go-pay/gopay/pkg/xlog"
)
func Alipay() {
var err error
appId := global.Config.Alipay.AppId
privateKey := global.Config.Alipay.PrivateKey
global.Alipay, err = alipay.New(appId, privateKey, false);
pay := global.Config.Alipay
client, err := alipay.NewClient(pay.AppId, pay.PrivateKey, false)
if err != nil {
log.Println("初始化支付宝支付服务失败", err)
xlog.Error(err)
return
}
// 加载支付宝证书
if err = global.Alipay.LoadAppPublicCertFromFile(global.Config.Alipay.AppPublicCert); err != nil {
log.Println("加载证书发生错误", err)
return
}
client.DebugSwitch = gopay.DebugOn
if err = global.Alipay.LoadAliPayRootCertFromFile(global.Config.Alipay.AlipayRootCert); err != nil {
log.Println("加载证书发生错误", err)
// 设置支付宝请求、公钥证书模式
client.SetReturnUrl(pay.ReturnURL).SetNotifyUrl(pay.NotifyURL)
err = client.SetCertSnByPath(pay.AppPublicCert, pay.AlipayRootCert, pay.AlipayPublicCert)
if err != nil {
log.Printf("init alipay cert error: %s", err)
return
}
if err = global.Alipay.LoadAliPayPublicCertFromFile(global.Config.Alipay.AlipayPublicCert); err != nil {
log.Println("加载证书发生错误", err)
return
}
}
global.Alipay = client
}