简介

由于开通支付宝支付需要提交各种各样的资料,这里使用的是沙箱环境,不过跟真正的支付宝都是一样的

支付宝开放平台沙箱环境
本文代码地址

代码

config.yaml

app_id: '你的appID'
private_key: '你的私钥'
ali_public_key: '你的阿里公钥'
notify_url: '支付成功回调地址'
return_url: '支付成功跳转地址'
product_code: 'FAST_INSTANT_TRADE_PAY' # 销售产品码,与支付宝签约的产品码名称
sub_ject: '番茄炒蛋' # 订单标题

config

type AliConfig struct {AppID        string `mapstructure:"app_id"`PrivateKey   string `mapstructure:"private_key"`AliPublicKey string `mapstructure:"ali_public_key"`NotifyURL    string `mapstructure:"notify_url"`ReturnURL    string `mapstructure:"return_url"`ProductCode  string `mapstructure:"product_code"`Subject      string `mapstructure:"sub_ject"`
}

server

package mainimport ("fmt""github.com/gin-gonic/gin""github.com/satori/go.uuid""github.com/smartwalle/alipay/v3""github.com/spf13/viper""go-alipay/config""log""net/http""strings"
)var (AliPayClient *alipay.ClientAliPayConfig config.AliConfig
)func main() {r := gin.Default()InitAliConfig()InitAlipayClient()r.GET("/ping", Pong)r.GET("/get/pay", GetPay)r.POST("/alipay/notify", Notify)_ = r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}// InitAliConfig 初始化配置文件
func InitAliConfig() {v := viper.New()// 路径必须要写相对路径,相对于项目的路径v.SetConfigFile("config.yaml")if err := v.ReadInConfig(); err != nil {log.Fatalf("读取配置文件失败: %s", err.Error())}// 映射到结构体if err := v.Unmarshal(&AliPayConfig); err != nil {log.Fatalf("映射结构体失败: %s", err.Error())}
}// InitAlipayClient 初始化*alipay.Client
// 生成支付url和回调都需要用,只初始化一次就可以了
func InitAlipayClient() {var err error// isProduction - 是否为生产环境,传 false 的时候为沙箱环境,用于开发测试,正式上线的时候需要改为 trueAliPayClient, err = alipay.New(AliPayConfig.AppID, AliPayConfig.PrivateKey, false)if err != nil {log.Fatalf("加载alipay.Client失败: %s", err.Error())}// 加载支付宝公钥err = AliPayClient.LoadAliPayPublicKey(AliPayConfig.AliPublicKey)if err != nil {log.Fatalf("加载支付宝公钥失败: %s", err.Error())}
}// Pong ReturnURL:支付成功后会请求一次这个
func Pong(ctx *gin.Context) {ctx.JSON(http.StatusOK, gin.H{"message": "pong",})
}// Notify 回调地址: 支付成功后会回调这里;我们可以用来修改订单状态等等
func Notify(ctx *gin.Context) {noti, err := AliPayClient.GetTradeNotification(ctx.Request)if err != nil {log.Println("获取回调信息失败", err.Error())ctx.Status(http.StatusInternalServerError)return}fmt.Printf("订单号:%s;状态:%s\n", noti.OutTradeNo, noti.TradeStatus)ctx.String(http.StatusOK, "success")
}// GetPay 获取支付url
func GetPay(ctx *gin.Context) {OutTradeNo := fmt.Sprintf("%s", strings.ReplaceAll(uuid.NewV4().String(), "-", ""))var p = alipay.TradePagePay{}p.NotifyURL = AliPayConfig.NotifyURL // 回调地址;用来通知我们支付结果的,好去修改状态p.ReturnURL = AliPayConfig.ReturnURL // 返回地址;支付成功后,浏览器内跳转地址p.Subject = AliPayConfig.Subjectp.OutTradeNo = OutTradeNop.TotalAmount = "10.00"p.ProductCode = AliPayConfig.ProductCodeurl, err := AliPayClient.TradePagePay(p)if err != nil {log.Fatalf("生成支付url失败: %s", err.Error())}var payURL = url.String()log.Printf("订单号:%s创建支付url成功;", OutTradeNo)ctx.JSON(http.StatusOK, gin.H{"url": payURL,})
}

测试

获取支付url


复制返回的url进行支付



ReturnURL

NotifyURL

gin集成支付宝支付相关推荐

  1. Android端集成支付宝支付

    Android端集成支付宝支付 1.申请账号及配置变量 支付宝快速接入链接点击打开链接 支付宝扫码或者账号密码登录 下面是支付宝给出的接入介绍 第一步:创建应用并获取APPID 要在您的应用中接入支付 ...

  2. android如何实现支付宝,(Android集成支付宝支付)react-native实现支付宝支付

    网上关于RN的支付宝支付组件大部分都是IOS的,Android要实现支付宝支付只剩下走原生这一步了. 整体思路: 1.在蚂蚁金服开放平台申请应用 2.在android原生集成支付宝 3.封装andro ...

  3. Android 集成支付宝支付,支付宝支付2.0

    成功起调支付宝支付 下载支付sdk复制到libs文件夹下并add  as library:https://docs.open.alipay.com/54/104509 1.首先申请支付宝 企业账户  ...

  4. Java服务端集成支付宝支付SDK

    文章目录 文档 流程说明 添加依赖 集成步骤 常见问题 文档 蚂蚁金服官方文档 https://docs.open.alipay.com/54/103419/https://docs.open.ali ...

  5. tp5.1 集成支付宝支付方法(二)

    引用: https://blog.csdn.net/weixin_42122979/article/details/80899552 https://github.com/dream2023/Thin ...

  6. springboot 集成支付宝支付

    最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载 ...

  7. Android app集成支付宝支付

    支付宝支付 其实是比较简单的,但因为发起订单总是失败,经过各种测试.排除,最终确定是服务端返回数据有误造成的.所以严格来说支付宝文档等没有什么问题,问题在于后端程序员不认真看文档和测试. 申请id需要 ...

  8. Android怎么集成支付宝支付和微信支付功能(上)

    看到网上写支付的文章不多,又有感于许多资料和官网内容中到处都有坑,填过坑的我决定让支付简单点(想起了我当初到处找资料的情景,唉,心累).为便于浏览,分为支付宝支付和微信支付上下两篇.看官请看..... ...

  9. 【网站支付PHP篇】thinkPHP集成支付宝支付(担保交易)

    目录 系列说明 开发环境 部署支付宝 支付请求 支付宝返回处理 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家有用.这个系列会讲以下第三方支付平台的集成: ...

最新文章

  1. 这个40M的小工具助你在windows下处理数据如虎添翼!!
  2. 收回误删并清除了回收站的文档
  3. 【Python】列表 list 添加元素的几种方法
  4. 查看本机ssh公钥,生成公钥
  5. python创建提示用户输入查询条件_python流程控制练习
  6. godaddy最新域名优惠码永久有效
  7. BZOJ 4178 A
  8. lua中variables和table
  9. java日期多次使用修改,数据有问题
  10. IAR for STM8的基本使用教程
  11. Autumn中文文档2:控制器
  12. 多用户商城系统源码_业务逻辑功能思维导图_OctShop
  13. android 程序数据目录,Android APP 数据存放目录
  14. Visual Studio 2019 代码显示空格等空白符
  15. c# Excel 添加组合Range区域,方便选择Select()删除 Delete()
  16. Gwallet小百科 | 一文透析腾讯区块链技术
  17. 堆溢出(二)空表DWORD SHOOT
  18. mysql数据库性能测试实例_数据库性能测试方案示例
  19. python--打字练习的成绩判定
  20. 电脑更新win10系统一直卡在57%怎么办

热门文章

  1. Stetho调试无法查看本地数据
  2. SP-API 刊登api-上传变体
  3. 可以测试真假音的软件,想自由转换真假音,我教你啊!
  4. Linux下静态库与动态库的引用关系深入分析
  5. dbproxy选主原理
  6. 微信支付沙箱环境开发
  7. 单点登录(十)-----遇到问题-----cas启用mongodb验证方式报错com.mongodb.CommandFailureException---Authentication failed
  8. 计算机配置2块显卡,台式机切换显卡如何操作_台式电脑有两个显卡怎么切换-win7之家...
  9. 简单易用的任务队列-beanstalkd
  10. 高德地图api 2.0截图canvas 地图截不上