美文网首页
记一次 go语言开发 支付宝单笔转账功能

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

作者: Waymon丶魏 | 来源:发表于2023-10-08 09:46 被阅读0次

    一 、前期准备

    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
    

    相关文章

      网友评论

          本文标题:记一次 go语言开发 支付宝单笔转账功能

          本文链接:https://www.haomeiwen.com/subject/fwfbbdtx.html