当前位置:   article > 正文

golang对接支付宝支付_golang alipay rsa2

golang alipay rsa2

本文采用沙箱环境

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 main

import (
	"fmt"
	"github.com/smartwalle/alipay/v3"
	"net/http"
	"os/exec"
	"strings"
	"time"
)

var (
	// appId
	appId = ""
	// 应用公钥
	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"
	// 支付成功之后,浏览器将会重定向到该 URL
	pay.ReturnURL = "http://localhost:8088/return"
	//支付标题
	pay.Subject = "支付宝支付测试"
	//订单号,一个订单号只能支付一次
	pay.OutTradeNo = time.Now().String()
	//销售产品码,与支付宝签约的产品码名称,目前仅支持FAST_INSTANT_TRADE_PAY
	pay.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{}
	// 支付成功之后,支付宝将会重定向到该 URL
	pay.ReturnURL = "http://localhost:8088/return"
	//支付标题
	pay.Subject = "支付宝支付测试"
	//订单号,一个订单号只能支付一次
	pay.OutTradeNo = time.Now().String()
	//商品code
	pay.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() {
	//生成支付URL
	WapAlipay()
	//支付成功之后的返回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)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/486536
推荐阅读
相关标签
  

闽ICP备14008679号