refactor: use gopay as alipay
This commit is contained in:
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user