golang对接支付宝支付

本文采用沙箱环境

1. 开启沙箱

文档:https://docs.open.alipay.com/200/105311/
沙箱地址:https://openhome.alipay.com/platform/appDaily.htm

2. 生成应用公钥和秘钥(已弃用)

本文中的签名方法默认为 RSA2,采用支付宝提供的 RSA签名&验签工具 生成秘钥时,秘钥的格式必须为 PKCS1,秘钥长度推荐 2048。所以在支付宝管理后台请注意配置 RSA2(SHA256)密钥。
生成秘钥对之后,将公钥提供给支付宝(通过支付宝后台上传)对我们请求的数据进行签名验证,我们的代码中将使用私钥对请求数据签名。

RSA签名和验证工具下载:https://docs.open.alipay.com/291/105971

  1. 下载之后解压
  2. 双击RSA签名验签工具.bat
  3. 秘钥格式选择PKCS1
  4. 点击生成秘钥
  5. 复制公钥
  6. 回到沙箱中,点击查看应用公钥,然后点击修改
  7. 保存好私钥,我们一会需要在代码中用到
  8. 复制支付宝公钥,代码中验证需要用到
  9. 配置支付成功后的回调地址(这必须是个公网地址)

3. 证书认证

目前新创建的支付宝应用只支持证书方式认证,已经弃用之前的公钥和私钥的方式

公钥秘钥说明

我们生成秘钥对之后,将公钥提供给支付宝(通过支付宝后台上传)对我们请求的数据进行签名验证,我们的代码中使用私钥对请求数据签名。

  • 证书签名请求文件(用来提交给支付宝后台生成证书的)
  • 应用私钥(调用支付宝接口的时候,我们需要使用该私钥对参数进行签名)
  • 支付宝公钥证书(用来验证我们的签名的,现在已经被支付宝公钥证书取代)

3.1 下载生成工具

下载地址与文档:https://docs.open.alipay.com/291/105971

3.2 生成csr证书签名请求文件

工具安装好之后打开,点击获取

3.3 输入信息

主要是组织/公司这块一定要写的和你支付宝中应用的名一样,不然不会通过的,填写完毕之后点击生成CSR文件 ,点击页面的打开文件位置,就可以看到三个文件了,分别是证书签名请求文件应用公钥应用私钥

3.4 上传CSR证书签名请求文件

回到支付宝后台,点击 接口加签方式 设置,选择公钥证书,点击上次CSR生成证书,把我们刚才生成的那个证书(.csr)上传进去

3.5 下载证书

上传好之后,会弹出让你下载证书的页面,把那三个证书都下载下来,分别是: 应用公钥证书,支付宝公钥证书,支付宝根证书

代码部分

下载第三方库
go get github.com/smartwalle/alipay/v3

1. 网页扫码支付

package mainimport ("fmt""github.com/smartwalle/alipay/v3""net/http""os/exec""strings""time"
)var (// appIdappId = ""// 应用公钥aliPublicKey = ""// 应用私钥privateKey = ""client, _ = alipay.New(appId, aliPublicKey, privateKey, false)
)func init() {client.LoadAppPublicCert("应用公钥证书")client.LoadAliPayPublicCert("支付宝公钥证书")client.LoadAliPayRootCert("支付宝根证书")
}//网站扫码支付
func WebPageAlipay() {pay := alipay.AliPayTradePagePay{}// 支付宝回调地址(需要在支付宝后台配置)// 支付成功后,支付宝会发送一个POST消息到该地址pay.NotifyURL = "http://www.pibigstar/alipay"// 支付成功之后,浏览器将会重定向到该 URLpay.ReturnURL = "http://localhost:8088/return"//支付标题pay.Subject = "支付宝支付测试"//订单号,一个订单号只能支付一次pay.OutTradeNo = time.Now().String()//销售产品码,与支付宝签约的产品码名称,目前仅支持FAST_INSTANT_TRADE_PAYpay.ProductCode = "FAST_INSTANT_TRADE_PAY"//金额pay.TotalAmount = "0.01"url, err := client.TradePagePay(pay)if err != nil {fmt.Println(err)}payURL := url.String()//这个 payURL 即是用于支付的 URL,可将输出的内容复制,到浏览器中访问该 URL 即可打开支付页面。fmt.Println(payURL)//打开默认浏览器payURL = strings.Replace(payURL,"&","^&",-1)exec.Command("cmd", "/c", "start",payURL).Start()
}//手机客户端支付
func WapAlipay() {pay := alipay.AliPayTradeWapPay{}// 支付成功之后,支付宝将会重定向到该 URLpay.ReturnURL = "http://localhost:8088/return"//支付标题pay.Subject = "支付宝支付测试"//订单号,一个订单号只能支付一次pay.OutTradeNo = time.Now().String()//商品codepay.ProductCode = time.Now().String()//金额pay.TotalAmount = "0.01"url, err := client.TradeWapPay(pay)if err != nil {fmt.Println(err)}payURL := url.String()//这个 payURL 即是用于支付的 URL,可将输出的内容复制,到浏览器中访问该 URL 即可打开支付页面。fmt.Println(payURL)//打开默认浏览器payURL = strings.Replace(payURL,"&","^&",-1)exec.Command("cmd", "/c", "start",payURL).Start()
}func main() {//生成支付URLWapAlipay()//支付成功之后的返回URL页面http.HandleFunc("/return", func(rep http.ResponseWriter, req *http.Request) {req.ParseForm()ok, err := client.VerifySign(req.Form)if err == nil && ok {rep.Write([]byte("支付成功"))}})//支付成功之后的通知页面http.HandleFunc("/alipay", func(rep http.ResponseWriter, req *http.Request) {var noti, _ = client.GetTradeNotification(req)if noti != nil {fmt.Println("支付成功")//修改订单状态。。。。} else {fmt.Println("支付失败")}alipay.AckNotification(rep) // 确认收到通知消息})fmt.Println("server start....")http.ListenAndServe(":8088", nil)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/354032.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter支付宝支付

_。插件选型: 1.tobias 2.flutter_alipay 3.alipay_kit 4.sy_flutter_alipay 因为flutter项目的flutter sdk是2.53 有空安全,所以排除掉三年没更新的sy_flutter_alipay, flutter_alipay排除掉的原因是本项目的dart sdk版本太低不支持…

如何测试支付宝手机充值的这个功能,写出测试用例

有人在面试软件测试的时候,被问到如何测试支付宝手机充值的这个功能,写出测试用例。 其实无论测试什么,我们首先的需要梳理软件业务的流程,来看看支付宝充值都有哪些流程? 首先,面试官如果给出的是这样一…

p2p银行充值功能模块 支付宝调用

银行充值简介 用户要想要投标的话,那么需要往p2p平台上进行充值 使用支付宝沙箱 调用支付宝充值接口进行测试 用户余额页面展示用户的余额 点击充值调用跳转到银行充值页面 输入密码,密码正确调转到支付宝支付平台 登录账号密码进行充值 充值成功记录到…

抓包抖音充值接口,实现微信支付宝充值抖币收款通道

前段时间搞了个抖音充值的通道,现在搞个YY充值的。 接下来这段时间的安排就是把各个这种平台的充值接口全分析一遍做成接口。 相比抖音的充值抖币接口,yy充值y币的风控就小很多,可以忽略不计,所以开发上也顺利很多。 把调用的相…

SpringBoot源码分析:SpringBoot整合Tomcat(三)

一、概述 SpringBoot整合Tomcat整体启动流程如下图,接下来我们就按照改流程分析SpringBoot中内嵌Tomcat的启动流程。 二、启动流程 通过AbstractApplicationContext.refresh方法进入AbstractApplicationContext.onRefresh方法。 之后进入子类ServletWebServerAppl…

Django对接支付宝实现支付宝充值金币功能

很多网站里都有金币、积分之类的虚拟货币,获取这些往往需要充值。那么问题来了,如何在Django中对接支付宝实现支付宝充值金币的功能呢?网上很多资料都是电商的,那些都会带有订单系统之类比较复杂,而充值金币功能不需要…

抓包抖音充值页面实现微信支付宝充值抖币,可提供api

抖币充值系统重写升级: 1.支持配置扫码配置多个CK 2.支持生成 微信/支付宝 支付二维码 扫码充值 3.支持 微信/支付宝 APP 直接唤醒充值 体验如下: 需要的小伙伴可私信 留言! 整个开发流程思路是以下几步: 1.抓包分析抖音的充值的整个流程&#xff0…

如何使用支付宝充值美区App store的礼品卡

如何使用支付宝充值礼品卡 可能很多人不知道,支付宝可以给美区App Store 充钱,无需信用卡直接购买美区 Apple ID、Google Play、Spotify、Hulu礼品卡,下面就给大家介绍怎么购买 1.城市切换为:旧金山(国际-> 北美洲…

p2p金融项目+支付宝充值

目录 前言 下载服务端SDK 时序图: 按照支付宝时序图的过程去做: 第一步: 第二步--2:生成充值记录(状态:充值中) 第四步:调支付宝的支付接口 第七八步:&#xff0…

RecyclerView实现仿支付宝充值界面

参考博客&#xff1a;https://www.jianshu.com/p/b4bb52cdbeb7 非常感谢上面这位博主的博客给了我非常好的灵感&#xff01;&#xff01;&#xff01; 下面我就先贴一下效果图&#xff1a; 布局代码&#xff1a; <?xml version"1.0" encoding"utf-8"…

JAVA端实现支付宝充值

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;用户充值到平台 GitHub地址&#xff1a;https://github.com/wubiaowp/SpringCloud2.0.git 一、申请开发者账号-APPID、商户私钥、支付宝公钥、配置回调地址&#xff08;配置沙箱环境-测试&#xff09; 二…

discuz网站没备案无执照接入支付宝充值功能

discuz个人网站没备案无执照接入支付宝充值功能 文章目录 事情是这样的一、支付宝当面付是什么&#xff1f;二、如何申请当面付接口1.登录 支付宝商家中心2.点击“产品中心”&#xff0c;支付产品中选择当面付3.点击“立即开通”4.按步骤填写 三、创建应用及生成公钥和私钥1.登…

android约束布局充值页面,Android学习之RecylerView实习仿支付宝充值界面

今天周末&#xff0c;闲来无事&#xff0c;做了一个仿支付宝充值界面&#xff0c;主要知识点用RecylerView的GridlayoutManager布局管理器&#xff0c;实现不同数据类型&#xff0c;填充不同布局&#xff0c;功能包括单击选中&#xff0c;双击取消&#xff0c;支持可输入金额等…

DISCUZ插件微信支付宝充值积分69.220517最新版【收集免费】

DISCUZ应用中心成熟的微信支付宝积分充值插件&#xff0c;拥有大批使用的站长用户&#xff0c;稳定运行于用于各类站点&#xff0c;反馈优秀&#xff0c;收益丰厚&#xff1b; 一直被模仿&#xff0c;从未被超越。 DZ的积分体系功能已经十分强大&#xff0c;可以做很多事&…

Django对接支付宝实现支付宝充值金币功能示例

很多网站里都有金币、积分之类的虚拟货币&#xff0c;获取这些往往需要充值。那么问题来了&#xff0c;如何在Django中对接支付宝实现支付宝充值金币的功能呢&#xff1f;网上很多资料都是电商的&#xff0c;那些都会带有订单系统之类比较复杂&#xff0c;而充值金币功能不需要…

第9章集 合

文章目录 9.1 Java集合框架9.1.1 集合接口与实现分离9.1.3 迭代器9.1.4 泛型实用方法 9.2 集合框架中的接口9.3.1 链表9.3.2 数组列表9.3.3散列集9.3.4 树集9.3.5 队列与双端队列9.3.6 优先队列 9.4 映射9.4.1 基本映射操作9.4.2 更新映射条目9.4.3 映射视图9.4.4 弱散列映射9.…

MySQL数据库性能优化技巧介绍

MySQL是目前最流行和广泛使用的开源关系型数据库之一&#xff0c;随着数据量的增长和访问负载的提高&#xff0c;优化数据库性能变得至关重要&#xff0c;以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧&#xff0c;提高数据库的运行效率&a…

基于kubesphere的k8s环境部署单点版本的rook-ceph

文章目录 前言一、rook-ceph是什么&#xff1f;二、开始部署1.环境准备2.软件包准备3.下载rook-ceph文件4. 部署operator5.创建ceph集群6.创建工具容器&#xff0c;检查集群状态7.准备dashboard的nodeport端口映射服务8.准备prometheus的metric端口映射服务 总结 前言 基于kub…

记录使用Echarts-gl实现3D地图

一、前言 最近项目需要做个大屏展示的&#xff0c;开始做了第一版用户觉得地图太过于单调了&#xff0c;给我发了一个视频&#xff0c;让我参考着做。我看着视频上的地图旋转了方向、地图有标记、看着像是3D的&#xff08;视频上的地图使用多个图层叠加起来、CSS样式做了旋转&…

Warning: [antd: Menu] `children` will be removed in next major version. Please use `items` instead.

Warning: [antd: Menu] children will be removed in next major version. Please use items instead. andt 更新导致警告 https://ant.design/components/menu-cn/ 在 4.20.0 版本后&#xff0c;我们提供了 的简写方式&#xff0c;有更好的性能和更方便的数据组织方式&#x…