npm载入 “github.com/smartwalle/alipay/v3”
// 构建支付宝网页预支付订单
// 构建支付宝网页预支付订单
func AlipayGetWebOrder(Order_id string, Amount string, Name string) {
//appId 支付宝应用id ; privateKey应用私钥,开发者自己生成 ;true为生产环境,false为沙箱环境
aClient, err := alipay.New(appId, privateKey, true)
if err != nil {
log.Println("构建订单错误:", err)
}
err = client.LoadAliPayPublicKey(aliPublicKey)
if err != nil {
log.Println("初始化加载支付宝公钥错误:", err)
return ""
}
var p = alipay.TradePagePay{}
p.Subject = Name //商品名称
p.OutTradeNo = Order_id //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复
p.TotalAmount = Amount //订单总金额,单位为元,精确到小数点后两位
p.ProductCode = "FAST_INSTANT_TRADE_PAY" //支付宝签约的产品码名称。 App 支付时默认值为 QUICK_MSECURITY_PAY
url, err := aClient.TradePagePay(p)
if err != nil {
log.Println("返回支付页面错误:", err)
return ""
}
log.Println("支付页面地址:", url.String())
}// 构建支付宝APP预支付订单
// 构建支付宝APP预支付订单
func AlipayGetAppOrder(Order_id string, Amount string, Name string) {
client, err := alipay.New(appId, privateKey, true)
if err != nil {
log.Println("初始化支付宝客户端错误:", err)
return ""
}
err = client.LoadAliPayPublicKey(aliPublicKey)
if err != nil {
log.Println("初始化加载支付宝公钥错误:", err)
return ""
}
pay := alipay.TradeAppPay{} // page支付方式使用
pay.NotifyURL = "https://xxx.xxx.com/notify_url" // 支付结果回调的url,注意内网穿透问题
pay.ReturnURL = "https://xxx.xxx.com/return_url" // 支付成功后倒计时结束跳转的页面
pay.Subject = Name //商品名称
pay.OutTradeNo = Order_id //传递一个唯一单号
pay.TotalAmount = Amount //订单总金额,单位为元
pay.ProductCode = "FAST_INSTANT_TRADE_PAY" // page支付必须使用这个配置
code, err := client.TradeAppPay(pay)
if err != nil {
log.Println("App支付接口错误:", err)
return ""
}
log.Println("支付code :", code)
}// 支付宝退款
// 支付宝退款
func AlipayGetRefund(Order_id string, Amount string, Name string) {
client, err := alipay.New(appId, privateKey, true)
if err != nil {
log.Println("支付宝退款 初始化支付宝客户端错误:", err)
return obj
}
err = client.LoadAliPayPublicKey(aliPublicKey)
if err != nil {
log.Println("支付宝退款 初始化加载支付宝公钥错误:", err)
return obj
}
pay := alipay.TradeRefund{} //page支付方式使用
pay.OutTradeNo = Order_id //传递一个唯一单号
pay.RefundAmount = Amount //需要退款的金额
pay.RefundReason = Name //退款的原因说明
pay.OutRequestNo = Order_id + "01" //退款ID
data, err := client.TradeRefund(pay)
if err != nil {
log.Println("支付宝退款 App支付接口错误:", err)
return obj
}
log.Println("支付宝退款:", data)
return obj
}// 查询支付结果
// 查询支付结果
func QueryAliPay(Order_id string) {
// 加载钥
client, err := alipay.New(appId, privateKey, true)
if err != nil {
log.Println("查询支付结果 初始化支付宝客户端错误:", err)
return obj
}
err = client.LoadAliPayPublicKey(aliPublicKey)
if err != nil {
log.Println("查询支付结果 初始化加载支付宝公钥错误:", err)
return obj
}
// 加载证书(可有可无)
if err = client.LoadAppCertPublicKeyFromFile("./cert/aliPublicKey.crt"); err != nil {
log.Println("加载证书发生错误", err)
return
}
if err = client.LoadAliPayRootCertFromFile("./cert/alipayRootCert.crt"); err != nil {
log.Println("加载证书发生错误", err)
return
}
if err = client.LoadAlipayCertPublicKeyFromFile("./cert/alipayPublicCert.crt"); err != nil {
log.Println("加载证书发生错误", err)
return
}
if err = client.SetEncryptKey("C6iEav5UmeNCIpuSW0B+0g=="); err != nil {
log.Println("加载内容加密密钥发生错误", err)
return
}
//
pay := alipay.TradeQuery{} // page支付方式使用
pay.OutTradeNo = Order_id //传递一个唯一单号
data, err := client.TradeQuery(pay)
if err != nil {
log.Println("查询支付结果App支付接口错误:", err)
return obj
}
log.Println("支付结果 :", data)
}
// 接收支付状态
// 接收支付状态
func AlipayPayNotify(Req *http.Request) {
client, err := alipay.New(appId, privateKey, true)
if err != nil {
log.Println("查询支付结果 初始化支付宝客户端错误:", err)
return nil
}
err = client.LoadAliPayPublicKey(aliPublicKey)
if err != nil {
log.Println("查询支付结果 初始化加载支付宝公钥错误:", err)
return nil
}
// 加载证书(可有可无)
if err = client.LoadAppCertPublicKeyFromFile("./cert/aliPublicKey.crt"); err != nil {
log.Println("加载证书发生错误", err)
return
}
if err = client.LoadAliPayRootCertFromFile("./cert/alipayRootCert.crt"); err != nil {
log.Println("加载证书发生错误", err)
return
}
if err = client.LoadAlipayCertPublicKeyFromFile("./cert/alipayPublicCert.crt"); err != nil {
log.Println("加载证书发生错误", err)
return
}
if err = client.SetEncryptKey("C6iEav5UmeNCIpuSW0B+0g=="); err != nil {
log.Println("加载内容加密密钥发生错误", err)
return
}
//
data, err := client.GetTradeNotification(Req)
if err != nil {
log.Fatalf("GetTradeNotification: %v", err)
return nil
}
if err != nil {
log.Fatalf("接收支付状态xx:%v", err)
return nil
}
fmt.Println("接收支付状态:", data)
}