首页 > 其他分享 >推荐一个Go版本的支付库

推荐一个Go版本的支付库

时间:2024-12-07 23:33:20浏览次数:3  
标签:支付宝 err xlog gopay go 版本 支付 Go com

推荐一个Go版本的支付库

原创 Eagle1949 技术源泉    2024年12月06日 21:24 河南 听全文 gopay是一个使用Golang编写的支付库。现在支持微信、支付宝、QQ、通联支付、拉卡拉、PayPal。使用方法如下:引入gopay库
go get -u github.com/go-pay/gopay
使用示例:
import (    "github.com/go-pay/gopay"    "github.com/go-pay/xlog")func main() {    xlog.Info("GoPay Version: ", gopay.Version)}
我是在服务端对接支付宝时找到该库的,当时还只是支付宝和微信。现在又新增了多个支付厂商,支付宝和微信版本已经升级到V3版本了。使用该库对接支付宝非常的方便。所以推荐一下该库。这里以支付宝为例。在支付宝开放平台开通支付产品,获取支付宝证书。支付宝推荐使用证书认证。常用的支付宝产品,gopay已经实现,直接调用方法即可。首先,初始化支付宝客户端并做配置。
import (    "github.com/go-pay/gopay/alipay/v3"    "github.com/go-pay/xlog")// 初始化支付宝客V3户端// appid:应用ID// privateKey:应用私钥,支持PKCS1和PKCS8// isProd:是否是正式环境,沙箱环境请选择新版沙箱应用。client, err := alipay.NewClientV3("2016091200494382", privateKey, false)if err != nil {    xlog.Error(err)    return}// 自定义配置http请求接收返回结果body大小,默认 10MBclient.SetBodySize() // 没有特殊需求,可忽略此配置// 设置自定义RequestId生成方法,非必须client.SetRequestIdFunc()// 打开Debug开关,输出日志,默认关闭client.DebugSwitch = gopay.DebugOn// 设置biz_content加密KEY,设置此参数默认开启加密(目前不可用)//client.SetAESKey("1234567890123456")// 传入证书内容err := client.SetCert("appPublicCert.crt bytes", "alipayRootCert bytes", "alipayPublicCert.crt bytes")
然后,就是调用API方法和入参。以统一收单线下交易预创建作为示例:
import (    "github.com/go-pay/gopay"    "github.com/go-pay/gopay/pkg/js"    "github.com/go-pay/util"    "github.com/go-pay/xlog")// 请求参数bm := make(gopay.BodyMap)bm.Set("subject", "预创建创建订单").    Set("out_trade_no", util.RandomString(32)).    Set("total_amount", "0.01")// 创建订单aliRsp, err := client.TradePrecreate(ctx, bm)if err != nil {    xlog.Errorf("client.TradePrecreate(), err:%v", err)    return}xlog.Warnf("aliRsp:%s", js.Marshal(aliRsp))if aliRsp.StatusCode != Success {    xlog.Errorf("aliRsp.StatusCode:%d", aliRsp.StatusCode)    return}xlog.Warnf("aliRsp.QrCode:", aliRsp.QrCode)xlog.Warnf("aliRsp.OutTradeNo:", aliRsp.OutTradeNo)
最后,设置回调函数,用于接收支付宝异步通知。异步通知参数解析和验签Sign,gopay已经提供方法。下面看下使用:
import (    "github.com/go-pay/gopay/alipay")// 解析异步通知的参数// req:*http.RequestnotifyReq, err = alipay.ParseNotifyToBodyMap(c.Request)     // c.Request 是 gin 框架的写法if err != nil {    xlog.Error(err)    return}// value:url.ValuesnotifyReq, err = alipay.ParseNotifyByURLValues()if err != nil {    xlog.Error(err)    return}// 支付宝异步通知验签(公钥模式)ok, err = alipay.VerifySign(aliPayPublicKey, notifyReq)// 支付宝异步通知验签(公钥证书模式)ok, err = alipay.VerifySignWithCert("alipayPublicCert.crt content", notifyReq)// 如果需要,可将 BodyMap 内数据,Unmarshal 到指定结构体指针 ptrerr = notifyReq.Unmarshal(ptr)// ====异步通知,返回支付宝平台的信息====// 文档:https://opendocs.alipay.com/open/203/105286// 程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)// 此写法是 gin 框架返回支付宝的写法c.String(http.StatusOK, "%s", "success")// 此写法是 echo 框架返回支付宝的写法return c.String(http.StatusOK, "success")
gopay对支付宝支持非常棒,已经实现了很多支付API,如果你使用的产品还没有实现,也可以使用自定义方法。
import (    "github.com/go-pay/gopay"    "github.com/go-pay/gopay/pkg/js"    "github.com/go-pay/util"    "github.com/go-pay/xlog")// 请求参数bm := make(gopay.BodyMap)bm.Set("subject", "预创建创建订单").    Set("out_trade_no", util.RandomString(32)).    Set("total_amount", "0.01")rsp := new(struct {    OutTradeNo string `json:"out_trade_no"`    QrCode     string `json:"qr_code"`})// 创建订单res, err := client.DoAliPayAPISelfV3(ctx, alipay.MethodPost, "/v3/alipay/trade/precreate", bm, rsp)if err != nil {    xlog.Errorf("client.TradePrecreate(), err:%v", err)    return}xlog.Warnf("aliRsp:%s", js.Marshal(rsp))if res.StatusCode != Success {    xlog.Errorf("aliRsp.StatusCode:%d", res.StatusCode)    return}
更多内容,请参考Github:https://github.com/go-pay/gopay使用好的库,可以大大提高工作效率。推荐使用1分钱测试法。可以使用frp搭建支付宝联调环境。打开DebugSwitch 可以非常方便排查问题。你如果有对接支付宝和微信支付的需求,推荐使用该库。最后,发个推荐:豆子工具是一个微信小程序,内含IP地址查询、音频格式转换、网络调试等工具。欢迎浏览收藏。 Eagle1949

 我需要您的支持 

赞赏二维码钟意作者

  Golang116 Golang · 目录 上一篇如何自己搭建一个邮箱服务? 阅读 2214   ​

标签:支付宝,err,xlog,gopay,go,版本,支付,Go,com
From: https://www.cnblogs.com/cheyunhua/p/18592829

相关文章

  • 修改网站源logo,如何更改网站的源Logo
    网站Logo是品牌识别的重要元素,有时需要更换新的Logo以提升品牌形象。以下是详细步骤,帮助您更改网站的源Logo:登录后台管理系统:使用管理员账号登录网站的后台管理系统。导航到主题或模板管理界面,找到Logo设置选项。上传新Logo:在Logo设置界面中,点击“浏览”或“选择文件......
  • [精通现代支付操作:使用Modern Treasury简化你的支付流程]
    #精通现代支付操作:使用ModernTreasury简化你的支付流程##引言在当今的数字化时代,企业面临着复杂的支付操作和庞大的资金流动管理需求。ModernTreasury作为一个统一的平台,通过简化支付操作、实时追踪交易和余额,以及自动化支付流程,使企业能够有效管理资金流动。本文将......
  • 【C++】continue语句、goto语句
    1、continue 语句作用:在循环语句中,跳过本次循环中余下尚未执行的语句。继续下一次循环。注意:continue只能用于循环中。示例:代码://continue的用法#include<iostream>usingnamespacestd;intmain(){   //如果是奇数,则输出,否则不输出   for(inti=1......
  • Python 潮流周刊#80:Django 项目性能调优(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,3则音视频,全文2100字。以下是本期摘要:......
  • 版本比较工具类 - C#小函数类推荐
          此文记录的是版本比较工具类。/***版本比较工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:lzhdim@163.comBlog:http://lzhdim.cnblogs.comDate:2024-01-1515:18:00使用参考:if(Ve......
  • gorm:debug方法
    一,debug方法的作用:GORM提供了一个 Debug 方法,可以在链式调用中打印出生成的 SQL语句和执行时间。一般用于开发或者是线上排查某个问题时使用。Debug单个操作时,会将当前操作的log级别调整为logger.Info官方文档地址:https://gorm.io/zh_CN/docs/logger.html二,例子:......
  • Centos上安装配置Mongodb服务,并把全部文件放入/usr/My-Application文件夹中
    #创建安装目录sudomkdir-p/usr/My-Application/mongodbcd/usr/My-Application#下载MongoDBwgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.12.tgz#解压文件tar-zxvfmongodb-linux-x86_64-rhel80-6.0.12.tgz#重命名目录mvmongod......
  • golang: 返回错误时打印堆栈
    一,默认的错误打印:1,定义函数://打印错误的堆栈信息funcPrintStackTrace(errerror){ //创建一个缓冲区用于存储堆栈信息 buf:=bytes.NewBuffer(nil) //获取当前goroutine的堆栈信息 fori:=0;;i++{ pc,file,line,ok:=runtime.Caller(i) if!ok{ ......
  • 探索 LangChain 0.2.0 版本中的最新改变:如何适应和转型
    探索LangChain0.2.0版本中的最新改变:如何适应和转型引言在快速发展的编程世界中,库和框架的更新是不可避免的。这篇文章将帮助您理解和适应LangChain0.2.0版本带来的重要变更。本次更新注重使LangChain变得更加集成不可知,这意味着用户需要明确指定使用的模型和工具......
  • 7-Zip新版本,解压速度翻倍!
    点击上方蓝字关注我前言7-Zip是一个免费的压缩和解压软件,它没有广告弹窗,安装包很小只有1.5M。它能打开很多常见的压缩文件类型,功能就是专门用来压缩和解压的,界面很简单,用起来很方便,而且完全是免费的。安装环境[名称]:7-zip[版本]:2409[大小]:5MB[语言]:英文[环境]:Windows10/......