
离线 TA的专栏
- 打卡等级:热心大叔
- 打卡总天数:223
- 打卡月天数:0
- 打卡总奖励:3194
- 最近打卡:2025-04-13 11:58:00
|
目录
- 1.1 官网
- 1.2 秘钥生成(系统默认)
- 1.3 秘钥生成(软件生成)
- 1.4 golan 安装 SDK
- 1.5 GoLand 代码
- 1.6 前端代码
1.1 官网
- https://open.alipay.com/develop/sandbox/app
复制代码- https://opendocs.alipay.com/common/02kipk?pathHash=0d20b438
复制代码
1.2 秘钥生成(系统默认)
1.3 秘钥生成(软件生成)
****
1.4 golan 安装 SDK
- go get -u github.com/smartwalle/alipay/v3
复制代码
1.5 GoLand 代码
- package utils
- import (
- "fmt"
- "github.com/smartwalle/alipay/v3"
- "net/url"
- )
- func ZfbPay(orderID string, totalPrice string) string {
- appID := "9021000131612134" // 你的appID
- privateKey := "" // 你的私钥
- aliPublicKey := "" // 支付宝的公钥
- var client, err = alipay.New(appID, privateKey, false)
- if err != nil {
- panic(err)
- }
- err = client.LoadAliPayPublicKey(aliPublicKey)
- if err != nil {
- panic(err)
- }
- //var p = alipay.TradeWapPay{}
- var p = alipay.TradePagePay{}
- p.NotifyURL = "http://192.168.137.188:5173/#/pages/pay-success/pay-success" //支付宝回调
- p.ReturnURL = "http://192.168.137.188:5173/#/pages/pay-success/pay-success" //支付后调转页面
- p.Subject = "云尚校园-订单支付" //标题
- p.OutTradeNo = orderID //传递一个唯一单号
- p.TotalAmount = totalPrice //金额
- //p.ProductCode = "QUICK_WAP_WAY"
- p.ProductCode = "FAST_INSTANT_TRADE_PAY" //网页支付
- var url2 *url.URL
- url2, err = client.TradePagePay(p)
- if err != nil {
- fmt.Println(err)
- }
- var payURL = url2.String()
- println(payURL)
- return payURL
- }
复制代码- package dto
- type ShopPay struct {
- ByCode string `json:"byCode"`
- ShopID string `json:"id"`
- OrderTips string `json:"tips"`
- OrderTotalPrice string `json:"totalPrice"`
- OrderStatus string `json:"status"`
- OrderID string `json:"order_id"`
- }
复制代码- package models
- import "gorm.io/gorm"
- //
- // ShopPay
- // @Description: 生成订单号
- //
- type ShopPay struct {
- gorm.Model
- ByCode string `gorm:"type:varchar(100)"`
- OrderId string `gorm:"type:varchar(100); unique;not null"` // 订单ID
- OrderStatus string `gorm:"type:varchar(100); not null"` // 订单状态
- OrderTips string `gorm:"type:varchar(200); not null"` // 订单备注
- OrderTotalPrice string `gorm:"type:varchar(100); not null"`
- ShopID string `gorm:"type:varchar(100); not null"`
- }
复制代码- package common
- import (
- "github.com/spf13/viper"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- )
- var DB *gorm.DB
- func InitDB() *gorm.DB {
- host := viper.GetString("datasource.host")
- port := viper.GetString("datasource.port")
- database := viper.GetString("datasource.database")
- username := viper.GetString("datasource.username")
- password := viper.GetString("datasource.password")
- charset := viper.GetString("datasource.charset")
- db, err := gorm.Open(mysql.Open(username+`:`+password+`@tcp(`+host+`:`+port+`)/`+database+`?charset=`+charset+`&parseTime=true&loc=Local`),
- &gorm.Config{})
- if err != nil {
- panic("failed to connect database, err: " + err.Error())
- }
- db.AutoMigrate(&model.ShopPay{})
- DB = db
- return db
- }
- func GetDB() *gorm.DB {
- return DB
- }
复制代码- server:
- port: 9999
- datasource:
- diverName: mysql
- host: 127.0.0.1
- port: 3306
- database: go-app
- username: root
- password: 123456
- charset: utf8
复制代码- package controller
- import "github.com/gin-gonic/gin"
- type PayController interface {
- AddShopPay(ctx *gin.Context)
- OrderPay(ctx *gin.Context)
- }
复制代码- package pay
- import (
- "github.com/gin-gonic/gin"
- "go-app/common"
- "go-app/controller"
- "go-app/dto"
- model "go-app/models"
- "go-app/response"
- "go-app/utils"
- "gorm.io/gorm"
- "strconv"
- )
- type PayFun interface {
- controller.PayController
- }
- type payDB struct {
- DB *gorm.DB
- }
- func PayFunction() PayFun {
- db := common.GetDB()
- db.AutoMigrate(model.User{})
- return payDB{DB: db}
- }
- func (db payDB) AddShopPay(ctx *gin.Context) {
- getPayData := dto.ShopPay{}
- ctx.BindJSON(&getPayData)
- getPayData.OrderStatus = "2"
- getPayData.OrderID = strconv.FormatInt(utils.GetSnowflakeId(), 10)
- if getPayData.ByCode != "" {
- db.DB.Debug().Create(&getPayData)
- }
- response.Success(ctx, gin.H{"data": getPayData}, "success")
- }
- func (db payDB) OrderPay(ctx *gin.Context) {
- order := model.ShopPay{}
- id, _ := strconv.Atoi(ctx.Params.ByName("orderID"))
- db.DB.Debug().Where("order_id", id).First(&order)
- pay := utils.ZfbPay(order.OrderId, order.OrderTotalPrice)
- response.Success(ctx, gin.H{"data": pay}, "success")
- }
复制代码- package main
- import (
- "github.com/gin-gonic/gin"
- shopController "go-app/controller/shop"
- )
- func CollectRoute(r *gin.Engine) *gin.Engine {
- // 支付页面
- payGroup := r.Group("api/pay/")
- payFun := payController.PayFunction()
- payGroup.POST("/AddShopPay/", payFun.AddShopPay)
- payGroup.POST("/orderPay/:orderID", payFun.OrderPay)
- return r
- }
复制代码- package main
- import (
- "github.com/gin-contrib/cors"
- "github.com/gin-gonic/gin"
- "github.com/spf13/viper"
- "go-app/common"
- "os"
- )
- func main() {
- InitConfig()
- common.InitDB()
- r := gin.Default()
- config := cors.DefaultConfig()
- config.AllowAllOrigins = true //允许所有域名
- config.AllowMethods = []string{"GET", "POST", "OPTIONS"} //允许请求的方法
- config.AllowHeaders = []string{"token", "tus-resumable", "upload-length", "upload-metadata", "cache-control", "x-requested-with", "*"}
- r.Use(cors.New(config))
- // 定义路由和处理函数
- r = CollectRoute(r)
- port := viper.GetString("server.port")
- if port != "" {
- panic(r.Run(":" + port))
- }
- r.Run()
- }
- func InitConfig() {
- workDir, _ := os.Getwd()
- viper.SetConfigName("application")
- viper.SetConfigType("yml")
- viper.AddConfigPath(workDir + "/config")
- err := viper.ReadInConfig()
- if err != nil {
- panic(err)
- }
- }
复制代码 1.6 前端代码
到此这篇关于GO语言支付宝沙箱对接的实现的文章就介绍到这了,更多相关GO语言支付宝沙箱对接内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|