一 、前期准备
1 支付宝开放平台 注册应用(企业)
因为业务需求是后台管理系统打款,所以注册的是 网页/移动开发
2 提交应用用审核
24小时就会审核通过
3 产品绑定
选择转账到支付宝账户
640.png
4 api 管理
需要完成对应的接入,没有完成会出现appid 无效
640-1.png
5 证书配置
根据提示配置即可,保存好个人的 privateKey 哟 (MIIE开头的)
640.png二 、开发
1 go get
go github.com/smartwalle/alipay/v3
2 不废话 直接上代码
package alipay
import "github.com/smartwalle/alipay/v3"
func AlipayTransfer(tradeNo, username, name string, money int) (*alipay.FundTransUniTransferRsp, error) {
privateKey := viper.GetString("alipay.privateKey")
client, err := alipay.New("appid", privateKey, true)
if err != nil {
return nil, err
}
if err = client.LoadAppCertPublicKeyFromFile("./cert/alipay/appCertPublicKey_2021004121666305.crt"); err != nil {
return nil, err
}
if err = client.LoadAliPayRootCertFromFile("./cert/alipay/alipayRootCert.crt"); err != nil {
return nil, err
}
if err = client.LoadAlipayCertPublicKeyFromFile("./cert/alipay/alipayCertPublicKey_RSA2.crt"); err != nil {
return nil, err
}
payeeInfo := alipay.PayeeInfo{
Identity: username,
IdentityType: "ALIPAY_LOGON_ID",
Name: name,
}
uniTransfer := alipay.FundTransUniTransfer{
OutBizNo: tradeNo,
TransAmount: fmt.Sprintf("%.2f", float64(money)/float64(100)), // 我数据库喜欢把金额保存为整形 所以需要转成float类型
ProductCode: "TRANS_ACCOUNT_NO_PWD",
BizScene: "DIRECT_TRANSFER",
OrderTitle: "title",
PayeeInfo: &payeeInfo,
Remark: "remark",
}
result, err := client.FundTransUniTransfer(uniTransfer)
if err != nil {
fmt.Println(err)
return nil, err
}
return result, nil
}
3 调用
//支付宝提现
transfer, err := alipay.AlipayTransfer(tradeNo, account.UserName, account.Name, withdraw.Money)
if err != nil {
tx.Rollback()
return err
}
4 可以根据对应的错误提示 进行调整
5 备注:
转账需要大于0.1
保留两位小数点
- transfer.IsSuccess()
- transfer.IsFailure()
三 、心路历程
1 官方没有 go的demo,search了一下 也都是支付的内容,没有转账的内容。
2 看了官方的开发文档,在sign这块碰到了问题,因为还需要使用公钥文件 进行加签,需要找到公钥的加签no。遂放弃
3 看了alipay的github不尽如人意
4 所以我根据支付宝支付的go sdk,搜索Transfer,搜索出来 FundTransferUniTransfer和其他的,然后根据一步一步的提示 完成单笔转账开发
5 需要配置回调地址验证回调是否完成
6 一定要保存好privateKey
网友评论