当前位置: 代码网 > it编程>前端脚本>Golang > go使用支付宝沙箱实现支付宝支付的操作步骤

go使用支付宝沙箱实现支付宝支付的操作步骤

2024年05月18日 Golang 我要评论
支付宝沙箱支付使用背景:支付宝沙箱支付是支付宝提供的一个测试环境,用于开发者在不影响真实交易的情况下进行支付接口的开发和调试。在沙箱环境中,开发者可以模拟真实的支付流程,包括支付、退款、查询等操作,以

支付宝沙箱支付使用背景:

支付宝沙箱支付是支付宝提供的一个测试环境,用于开发者在不影响真实交易的情况下进行支付接口的开发和调试。在沙箱环境中,开发者可以模拟真实的支付流程,包括支付、退款、查询等操作,以便更好地调试和验证自己的支付接口是否正确。

使用支付宝沙箱支付可以帮助开发者提高支付接口的稳定性和安全性,避免在开发过程中对真实交易造成影响。同时,沙箱环境还提供了丰富的测试工具和文档,方便开发者快速上手和进行测试。

实现的页面效果

第一步:建立项目,复制下方main.go代码

代码架构展示

main里的代码

package main
 
import (
	"fmt"
	"log"
	"net/http"
 
	"github.com/gin-gonic/gin"
	"github.com/smartwalle/alipay/v3"
	"github.com/smartwalle/xid"
)
 
var client *alipay.client
 
const (
	kappid = "9021000134674475"
	//私钥
	kprivatekey = "miiepaibaakcaqeazshbdvo52mqoamvn1kfy7iuzfeuhdp/iya3vk5s6qp1n9hxvxwbn5y3cjtyapdypwbngfypxsodfuooh55vc5z0mtxwai3a9r1wsrl3caai7/2dif0chk9rcnzojwgoy8luny3iehl2hdn0qrqbsrytkwd5znedpowphtdidexhbzehksgtaq5+vdt9h7j3fka6bmgmmanvrmmh/23y6zeykvfnctjobwehcwx5wdonle1rdec2yl9hkxzhjc3wipmwdgdla3j+bx8nnhuvjw+etv6ivaxy4hvojgoiyyynit64vwfriysp9arckbwwjz+iiueaze0esiofsh/hiuqidaqabaoibag0/n8h7r+kkbpsxnv0hnpijndlqtcp1einqbdseba/chr24ovmw7zr+t4pmnnozkvm7kg0y0vqmt+9s5gjwgnvzcm7/fwhlwaj4syfscxm/lrhihawhgvmarwykdvctaoa4eyfrurm1ven734mdqwv7q7tcx0hmuv0yjwxz/l2zykiyn5z6elqndi7gfknebmlcm42qwoes6xc3so2+ltsi+fpkloi0fbqsj0aj6nkc2gzqztkfz0mny9hd//tcpz8finxio3z/zckdu90ug3qivxxeg/xleyyspoetaczag+qnrkz4jhbxobppobgmbff+7econiphmpubcb81xzecgyea9oyymy7k+ibsdargwewev8kzvycwnd3o0kc/73enoji4thqdmv9rvjwp3cgfivr1c1z3gf4zcto9jc/gvmpi72dwc/k9nyrhtgtnzhiveqy85c9/sdm2sbytoobwf9owplhlp+meogmmxecvgl3dlfiguoiymu7jxnkf/eis2f0cgyea1mh+2qsz6wtuw+f7z/t4phkgzwh4by1oodmc4bdna4+rw/yp1emblnifr5tbtaqms+hnl6mxshyziz1/2fnvdpiaku3nbkevq33lymv/qpuixxh5aro+btuhdpac7u4hboxt/xdvtrqjv57x59+/efhokq542dekde12u4orva0cgyea06uys9nj6p0/fxk9gjoiwbjucj4dsgyes3tpxyxdyt77y63oggbvqrnzxih1xrnygialc7s1y65bd2mu6pyubwus8cwksqw4h8zg0a7o8/49nqn4qx0ncw73esudiqr5mbgncqn3cqv10xpquwrd/lpvalkyjrod3pdu/vzfqqucgyealyenamfo/xenzbiboky8xd4nm286hf9i8wec4fmpy1htigtdxgzn9chtqrjkau/7zwwbqcxsua8n3wxuzyaojrdcahbs2p3w4iz4q/lrr3o+2or16sagjzg2ixnq861lzw/fhusc/vsw8+ll/tss6kzlj1syf+rezua5uc3atnkcgybfqjnahdpujqkpt+9kgdqjba6yutvxefwqf9ves9rdk6kse+mwounv4u3tq/fujdahuodyfiv+q5vrs9yqdwrwrtnmgfctm6zfjeou19ahtxaodoeadpefozhqu7nfnv1r/xjlap/lzspacpixpaykk+uwn1/ay2jq7jp4ywna7q=="
	// todo 设置回调地址域名
	kserverdomain = ""
)
 
func main() {
	var err error
	//支付宝提供了用于开发时测试的 sandbox 环境,对接的时候需要注意相关的 app id 和密钥是 sandbox 环境还是 production 环境的。如果是 sandbox 环境,本参数应该传 false,否则为 true。
	if client, err = alipay.new(kappid, kprivatekey, false); err != nil {
		log.println("初始化支付宝失败", err)
		return
	}
 
	// 加载证书
	// 加载应用公钥证书
	if err = client.loadappcertpublickeyfromfile("apppubliccert.crt"); err != nil {
		log.println("加载证书发生错误", err)
		return
	}
	// 加载支付宝根证书
	if err = client.loadalipayrootcertfromfile("alipayrootcert.crt"); err != nil {
		log.println("加载证书发生错误", err)
		return
	}
	// 加载支付宝公钥证书
	if err = client.loadalipaycertpublickeyfromfile("alipaypubliccert.crt"); err != nil {
		log.println("加载证书发生错误", err)
		return
	}
	//接口内容加密
	//	if err = client.setencryptkey("iotxr/d99t9awom/uasqiq=="); err != nil {
			log.println("加载内容加密密钥发生错误", err)
			return
		}
	//路由函数
	r := gin.default()
	r.get("/alipay/pay", pay)
	r.get("/alipay/callback", callback)
	r.get("/alipay/notify", notify)
 
	//http.handlefunc("/alipay/pay", pay)
	//http.handlefunc("/alipay/callback", callback)
	//http.handlefunc("/alipay/notify", notify)
 
	//http.listenandserve(":"+kserverport, nil)
	r.run()
}
 
func pay(c *gin.context) {
	var tradeno = fmt.sprintf("%d", xid.next())
 
	var p = alipay.tradepagepay{}
	p.notifyurl = kserverdomain + "/alipay/notify"
	p.returnurl = kserverdomain + "/alipay/callback"
	p.subject = "支付测试:" + tradeno
	p.outtradeno = tradeno
	p.totalamount = "20.00"
	p.productcode = "fast_instant_trade_pay"
 
	url, _ := client.tradepagepay(p)
	c.redirect(http.statustemporaryredirect, url.string())
	//http.redirect(writer, request, url.string(), http.statustemporaryredirect)
}
 
func callback(c *gin.context) {
	// 解析请求参数
	if err := c.request.parseform(); err != nil {
		log.println("解析请求参数发生错误", err)
		c.json(http.statusbadrequest, gin.h{"error": "解析请求参数发生错误"})
		return
	}
 
	// 获取通知参数
	outtradeno := c.request.form.get("out_trade_no")
 
	// 验证签名
	if err := client.verifysign(c.request.form); err != nil {
		log.println("回调验证签名发生错误", err)
		c.json(http.statusbadrequest, gin.h{"error": "回调验证签名发生错误"})
		return
	}
 
	log.println("回调验证签名通过")
 
	// 查询订单状态
	var p = alipay.tradequery{}
	p.outtradeno = outtradeno
 
	rsp, err := client.tradequery(p)
	if err != nil {
		log.printf("验证订单 %s 信息发生错误: %s", outtradeno, err.error())
		c.json(http.statusbadrequest, gin.h{"error": fmt.sprintf("验证订单 %s 信息发生错误: %s", outtradeno, err.error())})
		return
	}
 
	if rsp.isfailure() {
		log.printf("验证订单 %s 信息发生错误: %s-%s", outtradeno, rsp.msg, rsp.submsg)
		c.json(http.statusbadrequest, gin.h{"error": fmt.sprintf("验证订单 %s 信息发生错误: %s-%s", outtradeno, rsp.msg, rsp.submsg)})
		return
	}
 
	c.json(http.statusok, gin.h{"message": fmt.sprintf("订单 %s 支付成功", outtradeno)})
}
func notify(c *gin.context) {
	// 解析请求参数
	if err := c.request.parseform(); err != nil {
		log.println("解析请求参数发生错误", err)
		c.json(http.statusbadrequest, gin.h{"error": "解析请求参数发生错误"})
		return
	}
 
	// 解析异步通知
	notification, err := client.decodenotification(c.request.form)
	if err != nil {
		log.println("解析异步通知发生错误", err)
		c.json(http.statusbadrequest, gin.h{"error": "解析异步通知发生错误"})
		return
	}
 
	log.println("解析异步通知成功:", notification.notifyid)
 
	// 查询订单状态
	var p = alipay.newpayload("alipay.trade.query")
	p.addbizfield("out_trade_no", notification.outtradeno)
 
	var rsp *alipay.tradequeryrsp
	if err := client.request(p, &rsp); err != nil {
		log.printf("异步通知验证订单 %s 信息发生错误: %s", notification.outtradeno, err.error())
		c.json(http.statusbadrequest, gin.h{"error": fmt.sprintf("异步通知验证订单 %s 信息发生错误: %s", notification.outtradeno, err.error())})
		return
	}
 
	if rsp.isfailure() {
		log.printf("异步通知验证订单 %s 信息发生错误: %s-%s", notification.outtradeno, rsp.msg, rsp.submsg)
		c.json(http.statusbadrequest, gin.h{"error": fmt.sprintf("异步通知验证订单 %s 信息发生错误: %s-%s", notification.outtradeno, rsp.msg, rsp.submsg)})
		return
	}
 
	log.printf("订单 %s 支付成功", notification.outtradeno)
 
	client.acknotification(c.writer)
}

第二步:去支付宝开放平台下载自己的三个密钥证书以及appid

支付宝开放平台链接

扫码登录

进入控制台

下滑到最底部点击沙箱

第三步:在main.go中修改配置信息

(1)修改私钥和kappid

const (
	kappid = "9021000134674475"
	//私钥
	kprivatekey = "miiepaibaakcaqeazshbdvo52mqoamvn1kfy7iuzfeuhdp/iya3vk5s6qp1n9hxvxwbn5y3cjtyapdypwbngfypxsodfuooh55vc5z0mtxwai3a9r1wsrl3caai7/2dif0chk9rcnzojwgoy8luny3iehl2hdn0qrqbsrytkwd5znedpowphtdidexhbzehksgtaq5+vdt9h7j3fka6bmgmmanvrmmh/23y6zeykvfnctjobwehcwx5wdonle1rdec2yl9hkxzhjc3wipmwdgdla3j+bx8nnhuvjw+etv6ivaxy4hvojgoiyyynit64vwfriysp9arckbwwjz+iiueaze0esiofsh/hiuqidaqabaoibag0/n8h7r+kkbpsxnv0hnpijndlqtcp1einqbdseba/chr24ovmw7zr+t4pmnnozkvm7kg0y0vqmt+9s5gjwgnvzcm7/fwhlwaj4syfscxm/lrhihawhgvmarwykdvctaoa4eyfrurm1ven734mdqwv7q7tcx0hmuv0yjwxz/l2zykiyn5z6elqndi7gfknebmlcm42qwoes6xc3so2+ltsi+fpkloi0fbqsj0aj6nkc2gzqztkfz0mny9hd//tcpz8finxio3z/zckdu90ug3qivxxeg/xleyyspoetaczag+qnrkz4jhbxobppobgmbff+7econiphmpubcb81xzecgyea9oyymy7k+ibsdargwewev8kzvycwnd3o0kc/73enoji4thqdmv9rvjwp3cgfivr1c1z3gf4zcto9jc/gvmpi72dwc/k9nyrhtgtnzhiveqy85c9/sdm2sbytoobwf9owplhlp+meogmmxecvgl3dlfiguoiymu7jxnkf/eis2f0cgyea1mh+2qsz6wtuw+f7z/t4phkgzwh4by1oodmc4bdna4+rw/yp1emblnifr5tbtaqms+hnl6mxshyziz1/2fnvdpiaku3nbkevq33lymv/qpuixxh5aro+btuhdpac7u4hboxt/xdvtrqjv57x59+/efhokq542dekde12u4orva0cgyea06uys9nj6p0/fxk9gjoiwbjucj4dsgyes3tpxyxdyt77y63oggbvqrnzxih1xrnygialc7s1y65bd2mu6pyubwus8cwksqw4h8zg0a7o8/49nqn4qx0ncw73esudiqr5mbgncqn3cqv10xpquwrd/lpvalkyjrod3pdu/vzfqqucgyealyenamfo/xenzbiboky8xd4nm286hf9i8wec4fmpy1htigtdxgzn9chtqrjkau/7zwwbqcxsua8n3wxuzyaojrdcahbs2p3w4iz4q/lrr3o+2or16sagjzg2ixnq861lzw/fhusc/vsw8+ll/tss6kzlj1syf+rezua5uc3atnkcgybfqjnahdpujqkpt+9kgdqjba6yutvxefwqf9ves9rdk6kse+mwounv4u3tq/fujdahuodyfiv+q5vrs9yqdwrwrtnmgfctm6zfjeou19ahtxaodoeadpefozhqu7nfnv1r/xjlap/lzspacpixpaykk+uwn1/ay2jq7jp4ywna7q=="
	// todo 设置回调地址域名
	kserverdomain = ""
)

将私钥 和 kappid改成自己的

(2)将下载好的应用公钥、支付宝公钥证书、支付宝根证书复制到文件夹下

(3)修改main.go里支付宝里证书的名称

// 加载应用公钥证书
	if err = client.loadappcertpublickeyfromfile("自己公钥证书的文件名"); err != nil {
		log.println("加载证书发生错误", err)
		return
	}
	// 加载支付宝根证书
	if err = client.loadalipayrootcertfromfile("自己支付宝根证书的文件名"); err != nil {
		log.println("加载证书发生错误", err)
		return
	}
	// 加载支付宝公钥证书
	if err = client.loadalipaycertpublickeyfromfile("自己支付宝公钥证书的文件名"); err != nil {
		log.println("加载证书发生错误", err)
		return
	}

结束 

在控制台的沙箱操作时可以查看自己的沙箱账号用于模拟收付款

以上就是go使用支付宝沙箱实现支付宝支付的操作步骤的详细内容,更多关于go支付宝沙箱支付的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com