| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package main
- import (
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/smartwalle/alipay/v3"
- "github.com/smartwalle/xid"
- "log"
- "net/http"
- )
- var aliClient *alipay.Client
- const (
- kAppId = "2021000119666270"
- kPrivateKey = "MIIEowIBAAKCAQEAkbkW2kQldWDejDYjRWyBSjHua0kSLHj/jHW01zXTUjTOr+iWssepFPANjWGskbNUIF3frZEDfLIC3TPGGm1+2PQceG1YTXtHm0biOfO8tWR8z6htYxmWaTBShQpGKsMDL54WNOfrxr9SA6u77YkEdmfvGm213mQHKb6M9U2T/I3svii9nLiv71CWVsXSpQdZBE8hY4Sk/RBltqdQ0btqdzIp7Z7H5gPv66Jdms3ewlUjt96SokSDxo4qo4tPToDqDmGeheHqgC6IbpeyCMEZVs3QBtCChB3NPFcdEyxbhgJ9J6zo9tsdDNGTTs4Bn2ALsXbllyrVs1oznv+OCO381wIDAQABAoIBAGp26LxUt21XdaDI2OIa0Sbs7fzSKQX27PWo9ZOaTqcrz6nza0540w5qB+y4ZMUaWKdBDm+XmA2dXLxR3DVotBk72CUf9ji9jeZjVlryuXdpUErDChAyHJMDa/apN/R7/7Llc+H5Y2gUVY47BRUZWvpLGwSbDRnKyPT1s7RwlmMYBugmoREpIknQbzrsygOH27dw6QPdJRgng8Uy1K7/KD8Ycf2i0jUfcHhGmsWysJofr723bjq0j7T2XALekiPzPlH85mf1rdBWtCcTuOZ8J/6A5HQJhn57KABiK3MrB5X7DTapz5htiiiEfq/+TVdsc3+uYYWZMVpYn/kM8oLELlECgYEA92ksUssXz/iDm+GrNz4n5wxuOXhQsN/F4/QoekeBUkqr7ixhJH/K9EQWjdYsHeE+HzZkXf9bJr9deXyMJSNbfGkJhdK5pezVunpm/W1uR021R6giHGyvA6JLsX9svdqhGxiMJnNs6bWAGvm8ZexIdzHmnBJPuDeF1FQwhtWspq8CgYEAlsguRIcYjO0tplfN9WuveWoa5IDlV8iu8WSIA2+pHBS3tzOopU7vSw2GzTSY/n6M/aTZd1AdjJrFkANQ2u3ngg11Ajv1woZqg99qAUfy0eSbIPIhK9GsHvkh/TNLIY8da+i2bOyHEzlMi3RV75FQP7z1ii+iAM/6yoZvLUT7FlkCgYEArTEVkvuStsYbsyJdTbWYDzh3bImZysdK6xD+yOKHV8jn5Dly4y8GLsn/E9kKVvxXFVhpGBfqggxR7fpOzKycnVGWFfT2en14/Co1MFDLcuSl8vxyrH00YpHY9O7je1+xiZs8eKoyYsPoYnnR9XNbIv1ulnCHF8jeSU2KDslDLAcCgYAXOJsPiLK6OWi3XnxkmIH8s9+SY1tuqoRuvqnHxbGIlpQ4jaciVka6C0pAXiJVx02VXobzPg5e8hMM+8W/AbaOq93iSzOtEqBi0Mx1iAwYURmm+EMtiWv1lS6r3PNsJqtETCGUItUmm8NzEqaNb5apSkOSVYWglGcuO4fxs9breQKBgBcm+9GvriyH0Rvd0iXCTXLcd80oLCgkAgyKyOY42MTT4akFHG1P9mE8tUzZefqWGsNC3zycaOXSz4OIElIie+LnWMeKp1QpR3tV2EKX1am9IZeqm9SRa/7Fk7PQJS5/MFmHoDhhv7XoxZamjXphkpoQKtbCOaeYZCqb+XwPyxo5"
- kServerPort = "9989"
- kServerDomain = "http://127.0.0.1" + ":" + kServerPort
- )
- func main() {
- var err error
- if aliClient, err = alipay.New(kAppId, kPrivateKey, false); err != nil {
- log.Println("初始化支付宝失败", err)
- return
- }
- //应用公钥证书
- if err = aliClient.LoadAppPublicCertFromFile("appCertPublicKey_2021000119666270.crt"); err != nil {
- log.Println("加载应用公钥证书发生错误", err)
- return
- }
- //支付宝根证书
- if err = aliClient.LoadAliPayRootCertFromFile("alipayRootCert.crt"); err != nil {
- log.Println("加载支付宝根证书发生错误", err)
- return
- }
- //支付宝公钥证书
- if err = aliClient.LoadAliPayPublicCertFromFile("alipayCertPublicKey_RSA2.crt"); err != nil {
- log.Println("加载支付宝公钥证书发生错误", err)
- return
- }
- //生成支付URL
- //WapAlipay()
- //WebPageAlipay()
- var s = gin.Default()
- s.GET("/alipay", pay)
- s.GET("/callback", callback)
- s.POST("/notify", notify)
- s.Run(":" + kServerPort)
- }
- func pay(c *gin.Context) {
- var orderId = fmt.Sprintf("%d", xid.Next())
- var p = alipay.TradePagePay{}
- p.NotifyURL = kServerDomain + "/notify"
- p.ReturnURL = kServerDomain + "/callback"
- p.Subject = "Avata 服务平台资金账户充值"
- p.OutTradeNo = orderId
- p.TotalAmount = "0.01"
- p.ProductCode = "FAST_INSTANT_TRADE_PAY"
- url, _ := aliClient.TradePagePay(p)
- c.Redirect(http.StatusTemporaryRedirect, url.String())
- }
- func callback(c *gin.Context) {
- c.Request.ParseForm()
- ok, err := aliClient.VerifySign(c.Request.Form)
- if err != nil {
- log.Println("回调验证签名发生错误", err)
- return
- }
- if ok == false {
- log.Println("回调验证签名未通过")
- return
- }
- var outTradeNo = c.Request.Form.Get("out_trade_no")
- var p = alipay.TradeQuery{}
- p.OutTradeNo = outTradeNo
- rsp, err := aliClient.TradeQuery(p)
- if err != nil {
- c.String(http.StatusBadRequest, "验证订单 %s 信息发生错误: %s", outTradeNo, err.Error())
- return
- }
- if rsp.IsSuccess() == false {
- c.String(http.StatusBadRequest, "验证订单 %s 信息发生错误: %s-%s", outTradeNo, rsp.Content.Msg, rsp.Content.SubMsg)
- return
- }
- c.String(http.StatusOK, "订单 %s 支付成功", outTradeNo)
- }
- func notify(c *gin.Context) {
- c.Request.ParseForm()
- ok, err := aliClient.VerifySign(c.Request.Form)
- if err != nil {
- log.Println("异步通知验证签名发生错误", err)
- return
- }
- if ok == false {
- log.Println("异步通知验证签名未通过")
- return
- }
- log.Println("异步通知验证签名通过")
- var outTradeNo = c.Request.Form.Get("out_trade_no")
- var p = alipay.TradeQuery{}
- p.OutTradeNo = outTradeNo
- rsp, err := aliClient.TradeQuery(p)
- if err != nil {
- log.Printf("异步通知验证订单 %s 信息发生错误: %s \n", outTradeNo, err.Error())
- return
- }
- if rsp.IsSuccess() == false {
- log.Printf("异步通知验证订单 %s 信息发生错误: %s-%s \n", outTradeNo, rsp.Content.Msg, rsp.Content.SubMsg)
- return
- }
- log.Printf("订单 %s 支付成功 \n", outTradeNo)
- }
|