gin集成支付宝支付
简介
由于开通支付宝支付需要提交各种各样的资料,这里使用的是沙箱环境,不过跟真正的支付宝都是一样的
支付宝开放平台沙箱环境
本文代码地址
代码
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集成支付宝支付相关推荐
- Android端集成支付宝支付
Android端集成支付宝支付 1.申请账号及配置变量 支付宝快速接入链接点击打开链接 支付宝扫码或者账号密码登录 下面是支付宝给出的接入介绍 第一步:创建应用并获取APPID 要在您的应用中接入支付 ...
- android如何实现支付宝,(Android集成支付宝支付)react-native实现支付宝支付
网上关于RN的支付宝支付组件大部分都是IOS的,Android要实现支付宝支付只剩下走原生这一步了. 整体思路: 1.在蚂蚁金服开放平台申请应用 2.在android原生集成支付宝 3.封装andro ...
- Android 集成支付宝支付,支付宝支付2.0
成功起调支付宝支付 下载支付sdk复制到libs文件夹下并add as library:https://docs.open.alipay.com/54/104509 1.首先申请支付宝 企业账户 ...
- Java服务端集成支付宝支付SDK
文章目录 文档 流程说明 添加依赖 集成步骤 常见问题 文档 蚂蚁金服官方文档 https://docs.open.alipay.com/54/103419/https://docs.open.ali ...
- tp5.1 集成支付宝支付方法(二)
引用: https://blog.csdn.net/weixin_42122979/article/details/80899552 https://github.com/dream2023/Thin ...
- springboot 集成支付宝支付
最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载 ...
- Android app集成支付宝支付
支付宝支付 其实是比较简单的,但因为发起订单总是失败,经过各种测试.排除,最终确定是服务端返回数据有误造成的.所以严格来说支付宝文档等没有什么问题,问题在于后端程序员不认真看文档和测试. 申请id需要 ...
- Android怎么集成支付宝支付和微信支付功能(上)
看到网上写支付的文章不多,又有感于许多资料和官网内容中到处都有坑,填过坑的我决定让支付简单点(想起了我当初到处找资料的情景,唉,心累).为便于浏览,分为支付宝支付和微信支付上下两篇.看官请看..... ...
- 【网站支付PHP篇】thinkPHP集成支付宝支付(担保交易)
目录 系列说明 开发环境 部署支付宝 支付请求 支付宝返回处理 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家有用.这个系列会讲以下第三方支付平台的集成: ...
最新文章
- 这个40M的小工具助你在windows下处理数据如虎添翼!!
- 收回误删并清除了回收站的文档
- 【Python】列表 list 添加元素的几种方法
- 查看本机ssh公钥,生成公钥
- python创建提示用户输入查询条件_python流程控制练习
- godaddy最新域名优惠码永久有效
- BZOJ 4178 A
- lua中variables和table
- java日期多次使用修改,数据有问题
- IAR for STM8的基本使用教程
- Autumn中文文档2:控制器
- 多用户商城系统源码_业务逻辑功能思维导图_OctShop
- android 程序数据目录,Android APP 数据存放目录
- Visual Studio 2019 代码显示空格等空白符
- c# Excel 添加组合Range区域,方便选择Select()删除 Delete()
- Gwallet小百科 | 一文透析腾讯区块链技术
- 堆溢出(二)空表DWORD SHOOT
- mysql数据库性能测试实例_数据库性能测试方案示例
- python--打字练习的成绩判定
- 电脑更新win10系统一直卡在57%怎么办
热门文章
- Stetho调试无法查看本地数据
- SP-API 刊登api-上传变体
- 可以测试真假音的软件,想自由转换真假音,我教你啊!
- Linux下静态库与动态库的引用关系深入分析
- dbproxy选主原理
- 微信支付沙箱环境开发
- 单点登录(十)-----遇到问题-----cas启用mongodb验证方式报错com.mongodb.CommandFailureException---Authentication failed
- 计算机配置2块显卡,台式机切换显卡如何操作_台式电脑有两个显卡怎么切换-win7之家...
- 简单易用的任务队列-beanstalkd
- 高德地图api 2.0截图canvas 地图截不上