欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go使用支付寶沙箱實現(xiàn)支付寶支付的操作步驟

 更新時間:2024年03月10日 10:21:32   作者:曉看云起時  
支付寶沙箱支付是支付寶提供的一個測試環(huán)境,用于開發(fā)者在不影響真實交易的情況下進行支付接口的開發(fā)和調(diào)試,本文給大家介紹了go使用支付寶沙箱實現(xiàn)支付寶支付的操作步驟,文中有詳細的代碼示例和圖文供大家參考,需要的朋友可以參考下

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

支付寶沙箱支付是支付寶提供的一個測試環(huán)境,用于開發(fā)者在不影響真實交易的情況下進行支付接口的開發(fā)和調(diào)試。在沙箱環(huán)境中,開發(fā)者可以模擬真實的支付流程,包括支付、退款、查詢等操作,以便更好地調(diào)試和驗證自己的支付接口是否正確。

使用支付寶沙箱支付可以幫助開發(fā)者提高支付接口的穩(wěn)定性和安全性,避免在開發(fā)過程中對真實交易造成影響。同時,沙箱環(huán)境還提供了豐富的測試工具和文檔,方便開發(fā)者快速上手和進行測試。

實現(xiàn)的頁面效果

第一步:建立項目,復(fù)制下方main.go代碼

代碼架構(gòu)展示

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 設(shè)置回調(diào)地址域名
	kServerDomain = ""
)
 
func main() {
	var err error
	//支付寶提供了用于開發(fā)時測試的 sandbox 環(huán)境,對接的時候需要注意相關(guān)的 app id 和密鑰是 sandbox 環(huán)境還是 production 環(huán)境的。如果是 sandbox 環(huán)境,本參數(shù)應(yīng)該傳 false,否則為 true。
	if client, err = alipay.New(kAppId, kPrivateKey, false); err != nil {
		log.Println("初始化支付寶失敗", err)
		return
	}
 
	// 加載證書
	// 加載應(yīng)用公鑰證書
	if err = client.LoadAppCertPublicKeyFromFile("appPublicCert.crt"); err != nil {
		log.Println("加載證書發(fā)生錯誤", err)
		return
	}
	// 加載支付寶根證書
	if err = client.LoadAliPayRootCertFromFile("alipayRootCert.crt"); err != nil {
		log.Println("加載證書發(fā)生錯誤", err)
		return
	}
	// 加載支付寶公鑰證書
	if err = client.LoadAlipayCertPublicKeyFromFile("alipayPublicCert.crt"); err != nil {
		log.Println("加載證書發(fā)生錯誤", err)
		return
	}
	//接口內(nèi)容加密
	//	if err = client.SetEncryptKey("iotxR/d99T9Awom/UaSqiQ=="); err != nil {
			log.Println("加載內(nèi)容加密密鑰發(fā)生錯誤", err)
			return
		}
	//路由函數(shù)
	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) {
	// 解析請求參數(shù)
	if err := c.Request.ParseForm(); err != nil {
		log.Println("解析請求參數(shù)發(fā)生錯誤", err)
		c.JSON(http.StatusBadRequest, gin.H{"error": "解析請求參數(shù)發(fā)生錯誤"})
		return
	}
 
	// 獲取通知參數(shù)
	outTradeNo := c.Request.Form.Get("out_trade_no")
 
	// 驗證簽名
	if err := client.VerifySign(c.Request.Form); err != nil {
		log.Println("回調(diào)驗證簽名發(fā)生錯誤", err)
		c.JSON(http.StatusBadRequest, gin.H{"error": "回調(diào)驗證簽名發(fā)生錯誤"})
		return
	}
 
	log.Println("回調(diào)驗證簽名通過")
 
	// 查詢訂單狀態(tài)
	var p = alipay.TradeQuery{}
	p.OutTradeNo = outTradeNo
 
	rsp, err := client.TradeQuery(p)
	if err != nil {
		log.Printf("驗證訂單 %s 信息發(fā)生錯誤: %s", outTradeNo, err.Error())
		c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("驗證訂單 %s 信息發(fā)生錯誤: %s", outTradeNo, err.Error())})
		return
	}
 
	if rsp.IsFailure() {
		log.Printf("驗證訂單 %s 信息發(fā)生錯誤: %s-%s", outTradeNo, rsp.Msg, rsp.SubMsg)
		c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("驗證訂單 %s 信息發(fā)生錯誤: %s-%s", outTradeNo, rsp.Msg, rsp.SubMsg)})
		return
	}
 
	c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("訂單 %s 支付成功", outTradeNo)})
}
func notify(c *gin.Context) {
	// 解析請求參數(shù)
	if err := c.Request.ParseForm(); err != nil {
		log.Println("解析請求參數(shù)發(fā)生錯誤", err)
		c.JSON(http.StatusBadRequest, gin.H{"error": "解析請求參數(shù)發(fā)生錯誤"})
		return
	}
 
	// 解析異步通知
	notification, err := client.DecodeNotification(c.Request.Form)
	if err != nil {
		log.Println("解析異步通知發(fā)生錯誤", err)
		c.JSON(http.StatusBadRequest, gin.H{"error": "解析異步通知發(fā)生錯誤"})
		return
	}
 
	log.Println("解析異步通知成功:", notification.NotifyId)
 
	// 查詢訂單狀態(tài)
	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 信息發(fā)生錯誤: %s", notification.OutTradeNo, err.Error())
		c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("異步通知驗證訂單 %s 信息發(fā)生錯誤: %s", notification.OutTradeNo, err.Error())})
		return
	}
 
	if rsp.IsFailure() {
		log.Printf("異步通知驗證訂單 %s 信息發(fā)生錯誤: %s-%s", notification.OutTradeNo, rsp.Msg, rsp.SubMsg)
		c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("異步通知驗證訂單 %s 信息發(fā)生錯誤: %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 設(shè)置回調(diào)地址域名
	kServerDomain = ""
)

將私鑰 和 KAppId改成自己的

(2)將下載好的應(yīng)用公鑰、支付寶公鑰證書、支付寶根證書復(fù)制到文件夾下

(3)修改main.go里支付寶里證書的名稱

// 加載應(yīng)用公鑰證書
	if err = client.LoadAppCertPublicKeyFromFile("自己公鑰證書的文件名"); err != nil {
		log.Println("加載證書發(fā)生錯誤", err)
		return
	}
	// 加載支付寶根證書
	if err = client.LoadAliPayRootCertFromFile("自己支付寶根證書的文件名"); err != nil {
		log.Println("加載證書發(fā)生錯誤", err)
		return
	}
	// 加載支付寶公鑰證書
	if err = client.LoadAlipayCertPublicKeyFromFile("自己支付寶公鑰證書的文件名"); err != nil {
		log.Println("加載證書發(fā)生錯誤", err)
		return
	}

結(jié)束 

在控制臺的沙箱操作時可以查看自己的沙箱賬號用于模擬收付款

以上就是go使用支付寶沙箱實現(xiàn)支付寶支付的操作步驟的詳細內(nèi)容,更多關(guān)于go支付寶沙箱支付的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go語言實現(xiàn)的memcache協(xié)議服務(wù)的方法

    go語言實現(xiàn)的memcache協(xié)議服務(wù)的方法

    這篇文章主要介紹了go語言實現(xiàn)的memcache協(xié)議服務(wù)的方法,實例分析了Go語言使用memcache的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Go通過不變性優(yōu)化程序詳解

    Go通過不變性優(yōu)化程序詳解

    這篇文章主要為大家介紹了Go通過不變性優(yōu)化程序?qū)嵗斀猓行枰呐笥芽梢越梃b參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go操作redis與redigo的示例解析

    Go操作redis與redigo的示例解析

    這篇文章主要為大家介紹了Go操作redis與redigo的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Golang 性能基準(zhǔn)測試(benchmark)詳解

    Golang 性能基準(zhǔn)測試(benchmark)詳解

    Golang性能基準(zhǔn)測試可以幫助開發(fā)人員比較不同的實現(xiàn)方式對性能的影響,以便優(yōu)化程序,本文就來講解一下如何使用Golang的性能基準(zhǔn)測試功能,需要的朋友可以參考下
    2023-06-06
  • Golang設(shè)計模式之外觀模式的實現(xiàn)

    Golang設(shè)計模式之外觀模式的實現(xiàn)

    這篇文章主要介紹了Golang設(shè)計模式之外觀模式的實現(xiàn),外觀模式是一種常用的設(shè)計模式之一,是一種結(jié)構(gòu)型設(shè)計模式,它提供了一個簡單的接口來訪問復(fù)雜系統(tǒng)的各種功能,從而降低了系統(tǒng)的復(fù)雜度,需要詳細了解可以參考下文
    2023-05-05
  • Go語言報錯:'godoc'?不是內(nèi)部或外部命令,也不是可運行的程序(godoc無法使用處理)解決方法

    Go語言報錯:'godoc'?不是內(nèi)部或外部命令,也不是可運行的程序(godoc無法使用處理)解決

    這篇文章主要介紹了Go語言報錯:'godoc'?不是內(nèi)部或外部命令,也不是可運行的程序(godoc無法使用處理)解決方法,詳細描述了Go語言godoc命令無法使用的原因、解決方法與相關(guān)注意事項,需要的朋友可以參考下
    2024-01-01
  • Go語言基礎(chǔ)switch條件語句基本用法及示例詳解

    Go語言基礎(chǔ)switch條件語句基本用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)switch條件語句基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Go語言特點及基本數(shù)據(jù)類型使用詳解

    Go語言特點及基本數(shù)據(jù)類型使用詳解

    這篇文章主要為大家介紹了Go語言特點及基本數(shù)據(jù)類型使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • 使用Go進行單元測試的實現(xiàn)

    使用Go進行單元測試的實現(xiàn)

    這篇文章主要介紹了使用Go進行單元測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 詳解Go語言中io/ioutil工具的使用

    詳解Go語言中io/ioutil工具的使用

    這篇文章主要為大家詳細介紹了Go語言中io/ioutil工具的使用,從而簡化文件操作。文中是示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-05-05

最新評論