记一次 go语言开发 支付宝单笔转账功能

2023-10-08  本文已影响0人  Waymon丶魏

一 、前期准备

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
上一篇下一篇

猜你喜欢

热点阅读