1 支付宝开放平台 注册应用(企业)
因为业务需求是后台管理系统打款,所以注册的是 网页/移动开发
2 提交应用用审核
24小时就会审核通过
3 产品绑定

选择转账到支付宝账户
4 api 管理

需要完成对应的接入,没有完成会出现appid 无效
5 证书配置
根据提示配置即可,保存好个人的 privateKey 哟 (MIIE开头的)
二 、开发1 go get
go github.com/smartwalle/alipay/v3
2 不废话 直接上代码
package alipayimport "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