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) }
914 Views