gopay

package module
v1.5.81 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 20, 2022 License: Apache-2.0 Imports: 9 Imported by: 0

README

Logo was Loading Faild!

GoPay

微信、支付宝、PayPal、QQ 的 Golang 版本SDK

Github Github

Golang GoDoc Drone CI GitHub Release License GoDoc


  • 近期计划:

将 gopay 库中,非支付相关的一些接口方法独立出去另外的 sdk 库,在 go-pay 组织下新建 wechat-sdkalipay-sdk 两个项目,分别实现各个平台相关接口方法,优先进行 wechat-sdk 开发。

微信小程序或公众号相关接口方法:已从 微信v2 移步替换成 github.com/go-pay/wechat-sdk


一、安装

  • v1.5.42 开始,仓库从 github.com/iGoogle-ink/gopay 迁移到 github.com/joesonm/gopay
go get github.com/joesonm/gopay
import (
    "github.com/joesonm/gopay"
    "github.com/joesonm/gopay/pkg/xlog"
)

func main() {
    xlog.Info("GoPay Version: ", gopay.Version)
}

微信支付V3 API
推荐使用V3接口,官方在V3接口实现未覆盖或gopay未开发的接口,还继续用V2接口,欢迎参与完善V3接口。
  • 基础支付
    • APP下单:client.V3TransactionApp()
    • JSAPI/小程序下单:client.V3TransactionJsapi()
    • Native下单:client.V3TransactionNative()
    • H5下单:client.V3TransactionH5()
    • 查询订单:client.V3TransactionQueryOrder()
    • 关闭订单:client.V3TransactionCloseOrder()
  • 基础支付(服务商)
    • APP下单:client.V3PartnerTransactionApp()
    • JSAPI/小程序下单:client.V3PartnerTransactionJsapi()
    • Native下单:client.V3PartnerTransactionNative()
    • H5下单:client.V3PartnerTransactionH5()
    • 查询订单:client.V3PartnerQueryOrder()
    • 关闭订单:client.V3PartnerCloseOrder()
  • 合单支付
    • 合单APP下单:client.V3CombineTransactionApp()
    • 合单JSAPI/小程序下单:client.V3CombineTransactionJsapi()
    • 合单Native下单:client.V3CombineTransactionNative()
    • 合单H5下单:client.V3CombineTransactionH5()
    • 合单查询订单:client.V3CombineQueryOrder()
    • 合单关闭订单:client.V3CombineCloseOrder()
  • 退款
    • 申请退款:client.V3Refund()
    • 查询单笔退款:client.V3RefundQuery()
  • 账单
    • 申请交易账单:client.V3BillTradeBill()
    • 申请资金账单:client.V3BillFundFlowBill()
    • 申请特约商户资金账单:client.V3BillEcommerceFundFlowBill()
    • 下载账单:client.V3BillDownLoadBill()
  • 提现(服务商)
  • 微信支付分(公共API)
    • 创建支付分订单:client.V3ScoreOrderCreate()
    • 查询支付分订单:client.V3ScoreOrderQuery()
    • 取消支付分订单:client.V3ScoreOrderCancel()
    • 修改订单金额:client.V3ScoreOrderModify()
    • 完结支付分订单:client.V3ScoreOrderComplete()
    • 商户发起催收扣款:client.V3ScoreOrderPay()
    • 同步服务订单信息:client.V3ScoreOrderSync()
  • 微信支付分(免确认模式)
    • 创单结单合并:client.V3ScoreDirectComplete()
  • 微信支付分(免确认预授权模式)
    • 商户预授权:client.V3ScorePermission()
    • 查询用户授权记录(授权协议号):client.V3ScorePermissionQuery()
    • 解除用户授权关系(授权协议号):client.V3ScorePermissionTerminate()
    • 查询用户授权记录(openid):client.V3ScorePermissionOpenidQuery()
    • 解除用户授权关系(openid):client.V3ScorePermissionOpenidTerminate()
  • 微信先享卡
    • 预受理领卡请求:client.V3DiscountCardApply()
    • 增加用户记录:client.V3DiscountCardAddUser()
    • 查询先享卡订单:client.V3DiscountCardQuery()
  • 支付即服务
    • 服务人员注册:client.V3SmartGuideReg()
    • 服务人员分配:client.V3SmartGuideAssign()
    • 服务人员查询:client.V3SmartGuideQuery()
    • 服务人员信息更新:client.V3SmartGuideUpdate()
  • 点金计划(服务商)
  • 智慧商圈
    • 商圈积分同步:client.V3BusinessPointsSync()
    • 商圈积分授权查询:client.V3BusinessAuthPointsQuery()
  • 微信支付分停车服务
  • 代金券
    • 创建代金券批次:client.V3FavorBatchCreate()
    • 激活代金券批次:client.V3FavorBatchStart()
    • 发放代金券批次:client.V3FavorBatchGrant()
    • 暂停代金券批次:client.V3FavorBatchPause()
    • 重启代金券批次:client.V3FavorBatchRestart()
    • 条件查询批次列表:client.V3FavorBatchList()
    • 查询批次详情:client.V3FavorBatchDetail()
    • 查询代金券详情:client.V3FavorDetail()
    • 查询代金券可用商户:client.V3FavorMerchant()
    • 查询代金券可用单品:client.V3FavorItems()
    • 根据商户号查用户的券:client.V3FavorUserCoupons()
    • 下载批次核销明细:client.V3FavorUseFlowDownload()
    • 下载批次退款明细:client.V3FavorRefundFlowDownload()
    • 设置消息通知地址:client.V3FavorCallbackUrlSet()
  • 商家券
    • 创建商家券:client.V3BusiFavorBatchCreate()
    • 查询商家券详情:client.V3BusiFavorBatchDetail()
    • 核销用户券:client.V3BusiFavorUse()
    • 根据过滤条件查询用户券:client.V3BusiFavorUserCoupons()
    • 查询用户单张券详情:client.V3BusiFavorUserCouponDetail()
    • 上传预存code:client.V3BusiFavorCodeUpload()
    • 设置商家券事件通知地址:client.V3BusiFavorCallbackUrlSet()
    • 查询商家券事件通知地址:client.V3BusiFavorCallbackUrl()
    • 关联订单信息:client.V3BusiFavorAssociate()
    • 取消关联订单信息:client.V3BusiFavorDisassociate()
    • 修改批次预算:client.V3BusiFavorBatchUpdate()
    • 修改商家券基本信息:client.V3BusiFavorInfoUpdate()
    • 发放消费卡:client.V3BusiFavorSend()
    • 申请退券:client.V3BusiFavorReturn()
    • 使券失效:client.V3BusiFavorDeactivate()
    • 营销补差付款:client.V3BusiFavorSubsidyPay()
    • 查询营销补差付款单详情:client.V3BusiFavorSubsidyPayDetail()
  • 委托营销
    • 建立合作关系:client.V3PartnershipsBuild()
    • 终止合作关系:client.V3PartnershipsTerminate()
    • 查询合作关系列表:client.V3PartnershipsList()
  • 支付有礼
  • 分账
    • 请求分账:client.V3ProfitShareOrder()
    • 查询分账结果:client.V3ProfitShareOrderQuery()
    • 请求分账回退:client.V3ProfitShareReturn()
    • 查询分账回退结果:client.V3ProfitShareReturnResult()
    • 解冻剩余资金:client.V3ProfitShareOrderUnfreeze()
    • 查询剩余待分金额:client.V3ProfitShareUnsplitAmount()
    • 添加分账接收方:client.V3ProfitShareAddReceiver()
    • 删除分账接收方:client.V3ProfitShareDeleteReceiver()
  • 消费者投诉2.0
    • 查询投诉单列表:client.V3ComplaintList()
    • 查询投诉单详情:client.V3ComplaintDetail()
    • 查询投诉协商历史:client.V3ComplaintNegotiationHistory()
    • 创建投诉通知回调地址:client.V3ComplaintNotifyUrlCreate()
    • 查询投诉通知回调地址:client.V3ComplaintNotifyUrlQuery()
    • 更新投诉通知回调地址:client.V3ComplaintNotifyUrlUpdate()
    • 删除投诉通知回调地址:client.V3ComplaintNotifyUrlDelete()
    • 提交回复:client.V3ComplaintResponse()
    • 反馈处理完成:client.V3ComplaintComplete()
    • 商户上传反馈图片:client.V3ComplaintUploadImage()
  • 其他能力
    • 图片上传:client.V3MediaUploadImage()
    • 视频上传:client.V3MediaUploadVideo()
    • 图片上传(营销专用):client.V3FavorMediaUploadImage()
  • 批量转账
    • 发起批量转账:client.V3Transfer()
    • 微信批次单号查询批次单:client.V3TransferQuery()
    • 微信明细单号查询明细单:client.V3TransferDetailQuery()
    • 商家批次单号查询批次单:client.V3TransferMerchantQuery()
    • 商家明细单号查询明细单:client.V3TransferMerchantDetailQuery()
    • 转账电子回单申请受理:client.V3TransferReceipt()
    • 查询转账电子回单:client.V3TransferReceiptQuery()
    • 转账明细电子回单受理:client.V3TransferDetailReceipt()
    • 查询转账明细电子回单受理结果:client.V3TransferDetailReceiptQuery()
  • 余额查询
    • 查询特约商户账户实时余额(服务商):client.V3EcommerceBalance()
    • 查询账户实时余额:client.V3MerchantBalance()
    • 查询账户日终余额:client.V3MerchantDayBalance()
  • 来账识别
    • 商户银行来账查询:client.V3MerchantIncomeRecord()
    • 特约商户银行来账查询:client.V3EcommerceIncomeRecord()
  • 特约商户进件(服务商)
    • 提交申请单:client.V3Apply4SubSubmit()
    • 查询申请单状态(BusinessCode):client.V3Apply4SubQueryByBusinessCode()
    • 查询申请单状态(ApplyId):client.V3Apply4SubQueryByApplyId()
    • 修改结算账号:client.V3Apply4SubModifySettlement()
    • 查询结算账户:client.V3Apply4SubQuerySettlement()
微信V3公共API
  • wechat.GetPlatformCerts() => 获取微信平台证书公钥
  • wechat.V3VerifySign() => 微信V3 版本验签(同步/异步)
  • wechat.V3ParseNotify() => 解析微信回调请求的参数到 V3NotifyReq 结构体
  • client.V3EncryptText() => 敏感参数信息加密
  • client.V3DecryptText() => 敏感参数信息解密
  • wechat.V3EncryptText() => 敏感参数信息加密
  • wechat.V3DecryptText() => 敏感参数信息解密
  • wechat.V3DecryptNotifyCipherText() => 解密 普通支付 回调中的加密信息
  • wechat.V3DecryptRefundNotifyCipherText() => 解密 普通退款 回调中的加密信息
  • wechat.V3DecryptCombineNotifyCipherText() => 解密 合单支付 回调中的加密信息
  • wechat.V3DecryptScoreNotifyCipherText() => 解密 支付分 回调中的加密信息
  • client.PaySignOfJSAPI() => 获取 JSAPI 支付 paySign
  • client.PaySignOfApp() => 获取 APP 支付 paySign
  • client.PaySignOfApplet() => 获取 小程序 支付 paySign
QQ支付API

二、文档目录

点击查看不同支付方式的使用文档。方便的话,请留下您认可的小星星,十分感谢!


三、其他说明

  • GoPay 文档地址
  • 微信支付V2文档
  • QQ支付 使用方法请参考微信支付V2的文档
  • 所有方法,如有问题,请仔细查看 wechat/client_test.goalipay/client_test.go 或 examples
  • 有问题请加QQ群(加群验证答案:gopay),微信加好友拉群(微信群有两个,一个活跃群,聊的内容比较杂,一个只聊技术群,平时很少说话,加好友后说明加哪个群,默认全邀请)。在此,非常感谢那些加群后,提出意见和反馈问题的同志们!

QQ群: 加微信拉群:


1、初始化GoPay客户端并做配置(HTTP请求均默认设置tls.Config{InsecureSkipVerify: true})

  • 微信V3

注意:V3 版本接口持续增加中,不支持沙箱支付,测试请用1分钱测试法

注意:微信平台证书微信平台证书序列号,请自行通过 wechat.GetPlatformCerts() 方法维护

具体使用介绍,请参考 gopay/wechat/v3/client_test.go

import (
    "github.com/joesonm/gopay/wechat/v3"
)

// NewClientV3 初始化微信客户端 V3
//	mchid:商户ID 或者服务商模式的 sp_mchid
// 	serialNo:商户证书的证书序列号
//	apiV3Key:apiV3Key,商户平台获取
//	privateKey:私钥 apiclient_key.pem 读取后的内容
client, err = wechat.NewClientV3(MchId, SerialNo, APIv3Key, PrivateKey)
if err != nil {
    xlog.Error(err)
    return
}

// 设置微信平台证书和序列号,并启用自动同步返回验签
//	注意:请预先通过 wechat.GetPlatformCerts() 获取并维护微信平台证书和证书序列号
client.SetPlatformCert([]byte(WxPkContent), WxPkSerialNo).AutoVerifySign()

// 打开Debug开关,输出日志,默认是关闭的
client.DebugSwitch = gopay.DebugOn
  • 支付宝

支付宝官方文档:官方文档

支付宝RSA秘钥生成文档:生成RSA密钥 (推荐使用 RSA2)

技术支持 & 案例 FAQ:秘钥问题

沙箱环境使用说明:文档地址

import (
    "github.com/joesonm/gopay/alipay"
)

// 初始化支付宝客户端
//    appId:应用ID
//    privateKey:应用私钥,支持PKCS1和PKCS8
//    isProd:是否是正式环境
client := alipay.NewClient("2016091200494382", privateKey, false)

// 打开Debug开关,输出日志,默认关闭
client.DebugSwitch = gopay.DebugOn

// 设置支付宝请求 公共参数
//    注意:具体设置哪些参数,根据不同的方法而不同,此处列举出所有设置参数
client.SetLocation().                       // 设置时区,不设置或出错均为默认服务器时间
    SetAliPayRootCertSN().                  // 设置支付宝根证书SN,通过 alipay.GetRootCertSN() 获取
    SetAppCertSN().                         // 设置应用公钥证书SN,通过 alipay.GetCertSN() 获取
    SetAliPayPublicCertSN().                // 设置支付宝公钥证书SN,通过 alipay.GetCertSN() 获取
    SetCharset("utf-8").                    // 设置字符编码,不设置默认 utf-8
    SetSignType(alipay.RSA2).               // 设置签名类型,不设置默认 RSA2
    SetReturnUrl("https://www.fmm.ink").    // 设置返回URL
    SetNotifyUrl("https://www.fmm.ink").    // 设置异步通知URL
    SetAppAuthToken()                       // 设置第三方应用授权

// 自动同步验签(只支持证书模式)
// 传入 alipayCertPublicKey_RSA2.crt 内容
client.AutoVerifySign("alipayCertPublicKey_RSA2 bytes")

// 公钥证书模式,需要传入证书,以下两种方式二选一
// 证书路径
err := client.SetCertSnByPath("appCertPublicKey.crt", "alipayRootCert.crt", "alipayCertPublicKey_RSA2.crt")
// 证书内容
err := client.SetCertSnByContent("appCertPublicKey bytes", "alipayRootCert bytes", "alipayCertPublicKey_RSA2 bytes")

2、初始化并赋值BodyMap(client的方法所需的入参)

  • 微信请求参数

具体参数请根据不同接口查看:微信支付V3的API字典概览

import (
    "github.com/joesonm/gopay"
)

// JSAPI下单 示例
expire := time.Now().Add(10 * time.Minute).Format(time.RFC3339)
// 初始化 BodyMap
bm := make(gopay.BodyMap)
bm.Set("description", "测试Jsapi支付商品").
    Set("out_trade_no", tradeNo).
    Set("time_expire", expire).
    Set("notify_url", "https://www.fmm.ink").
    SetBodyMap("amount", func(bm gopay.BodyMap) {
        bm.Set("total", 1).
            Set("currency", "CNY")
    }).
    SetBodyMap("payer", func(bm gopay.BodyMap) {
        bm.Set("openid", "asdas")
    })
  • 支付宝请求参数

具体参数请根据不同接口查看:支付宝支付API接口文档

import (
    "github.com/joesonm/gopay"
)

// 统一收单交易支付接口 示例
// 初始化 BodyMap
bm := make(gopay.BodyMap)
bm.Set("subject", "条码支付").
    Set("scene", "bar_code").
    Set("auth_code", "286248566432274952").
    Set("out_trade_no", "GZ201909081743431443").
    Set("total_amount", "0.01").
    Set("timeout_express", "2m")

3、client 方法调用

  • 微信V3
// 公共方法
client.SetPlatformCert()
client.AutoVerifySign()
client.V3EncryptText()
client.V3DecryptText()

// 直连商户
wxRsp, err := client.V3TransactionApp()
wxRsp, err := client.V3TransactionJsapi()
wxRsp, err := client.V3TransactionNative()
wxRsp, err := client.V3TransactionH5()
wxRsp, err := client.V3TransactionQueryOrder()
wxRsp, err := client.V3TransactionCloseOrder(bm)

// 服务商
wxRsp, err := client.V3PartnerTransactionApp()
wxRsp, err := client.V3PartnerTransactionJsapi()
wxRsp, err := client.V3PartnerTransactionNative()
wxRsp, err := client.V3PartnerTransactionH5()
wxRsp, err := client.V3PartnerQueryOrder()
wxRsp, err := client.V3PartnerCloseOrder()

// 合单
wxRsp, err := client.V3CombineTransactionApp()
wxRsp, err := client.V3CombineTransactionJsapi()
wxRsp, err := client.V3CombineTransactionNative()
wxRsp, err := client.V3CombineTransactionH5()
wxRsp, err := client.V3CombineQueryOrder()
wxRsp, err := client.V3CombineCloseOrder()
...
  • 支付宝
// 手机网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面
payUrl, err := client.TradeWapPay()

// 电脑网站支付是通过服务端获取支付URL后,然后返回给客户端,请求URL地址即可打开支付页面
payUrl, err := client.TradePagePay()

// APP支付是通过服务端获取支付参数后,然后通过Android/iOS客户端的SDK调用支付功能
payParam, err := client.TradeAppPay()

// 商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款
aliRsp, err := client.TradePay()

// 支付宝小程序支付时 buyer_id 为必传参数,需要提前获取,获取方法如下两种
//  1、alipay.SystemOauthToken()     返回取值:aliRsp.SystemOauthTokenResponse.UserId
//  2、client.SystemOauthToken()     返回取值:aliRsp.SystemOauthTokenResponse.UserId
aliRsp, err := client.TradeCreate()
aliRsp, err := client.TradeQuery()
aliRsp, err := client.TradeClose()
aliRsp, err := client.TradeCancel()
aliRsp, err := client.TradeRefund()
aliRsp, err := client.TradePageRefund()
aliRsp, err := client.TradeFastPayRefundQuery()
aliRsp, err := client.TradeOrderSettle()
aliRsp, err := client.TradePrecreate()
...

4、微信下单后,获取微信小程序支付、APP支付、JSAPI支付所需要的 pay sign

  • 微信V3

小程序调起支付API:小程序调起支付API

APP调起支付API:APP调起支付API

JSAPI调起支付API:JSAPI调起支付API

H5调起支付API:H5调起支付API

// jsapi
jsapi, err := client.PaySignOfJSAPI("prepayid")
// app
app, err := client.PaySignOfApp("prepayid")
// 小程序
applet, err := client.PaySignOfApplet("prepayid")

5、同步返回参数验签Sign、异步通知参数解析和验签Sign、异步通知返回

异步通知请求参数需要先解析,解析出来的结构体或BodyMap再验签(此处需要注意,http.Request.Body 只能解析一次,如果需要解析前调试,请处理好Body复用问题)

Gin Web框架(推荐)

Echo Web框架

  • 微信V3
import (
    "github.com/joesonm/gopay/wechat/v3"
    "github.com/joesonm/gopay/pkg/xlog"
)

// ========同步返回 手动验签(如已开启自动验签,则无需手动验签操作)========
wxRsp, err := client.V3TransactionJsapi(bm)
if err != nil {
    xlog.Error(err)
    return
}
err = wechat.V3VerifySign(wxRsp.SignInfo.HeaderTimestamp, wxRsp.SignInfo.HeaderNonce, wxRsp.SignInfo.SignBody, wxRsp.SignInfo.HeaderSignature, WxPkContent)
if err != nil {
    xlog.Error(err)
    return
}

// ========异步通知验签========
notifyReq, err := wechat.V3ParseNotify()
if err != nil {
    xlog.Error(err)
    return
}
// WxPkContent 是通过 wechat.GetPlatformCerts() 接口向微信获取的微信平台公钥证书内容
err = notifyReq.VerifySign(WxPkContent)
if err != nil {
    xlog.Error(err)
    return
}

// ========异步通知敏感信息解密========
// 普通支付通知解密
result, err := notifyReq.DecryptCipherText(apiV3Key)
// 合单支付通知解密
result, err := notifyReq.DecryptCombineCipherText(apiV3Key)
// 退款通知解密
result, err := notifyReq.DecryptRefundCipherText(apiV3Key)

// ========异步通知应答========
// 退款通知http应答码为200且返回状态码为SUCCESS才会当做商户接收成功,否则会重试。
// 注意:重试过多会导致微信支付端积压过多通知而堵塞,影响其他正常通知。

// 此写法是 gin 框架返回微信的写法
c.JSON(http.StatusOK, &wechat.V3NotifyRsp{Code: gopay.SUCCESS, Message: "成功"})
// 此写法是 echo 框架返回微信的写法
return c.JSON(http.StatusOK, &wechat.V3NotifyRsp{Code: gopay.SUCCESS, Message: "成功"})
  • 支付宝

注意:APP支付、手机网站支付、电脑网站支付 不支持同步返回验签

支付宝支付后的同步/异步通知验签文档:支付结果通知

import (
    "github.com/joesonm/gopay/alipay"
)

// ====同步返回参数 手动验签(如已开启自动验签,则无需手动验签操作)====
aliRsp, err := client.TradePay(bm)
// 公钥模式验签
//    注意:APP支付,手机网站支付,电脑网站支付 不支持同步返回验签
//    aliPayPublicKey:支付宝平台获取的支付宝公钥
//    signData:待验签参数,aliRsp.SignData
//    sign:待验签sign,aliRsp.Sign
ok, err := alipay.VerifySyncSign(aliPayPublicKey, aliRsp.SignData, aliRsp.Sign)
// 公钥证书模式验签
//    aliPayPublicKeyCert:支付宝公钥证书存放路径 alipayCertPublicKey_RSA2.crt 或文件内容[]byte
//    signData:待验签参数,aliRsp.SignData
//    sign:待验签sign,aliRsp.Sign
ok, err := alipay.VerifySyncSignWithCert(aliPayPublicKeyCert, aliRsp.SignData, aliRsp.Sign)

// ====异步通知参数解析和验签Sign====
// 解析异步通知的参数
//    req:*http.Request
notifyReq, err = alipay.ParseNotifyToBodyMap(c.Request)     // c.Request 是 gin 框架的写法
 或
//    value:url.Values
notifyReq, err = alipay.ParseNotifyByURLValues()

// 支付宝异步通知验签(公钥模式)
ok, err = alipay.VerifySign(aliPayPublicKey, notifyReq)
// 支付宝异步通知验签(公钥证书模式)
ok, err = alipay.VerifySignWithCert("alipayCertPublicKey_RSA2.crt content", notifyReq)

// ====异步通知,返回支付宝平台的信息====
//    文档: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")

6、微信、支付宝 公共API(仅部分说明)

  • 微信V3 公共API

微信敏感信息加解密、回调接口敏感信息解密

import (
    "github.com/joesonm/gopay/wechat/v3"
)

// 获取微信平台证书和序列号信息
wechat.GetPlatformCerts()
// 请求参数 敏感信息加密
wechat.V3EncryptText() 或 client.V3EncryptText()
// 返回参数 敏感信息解密
wechat.V3DecryptText() 或 client.V3DecryptText()
// 回调通知敏感信息解密
wechat.V3DecryptNotifyCipherText()
wechat.V3DecryptRefundNotifyCipherText()
wechat.V3DecryptCombineNotifyCipherText()
...
  • 支付宝 公共API

支付宝换取授权访问令牌文档:换取授权访问令牌

小程序获取用户手机号文档:获取用户手机号

支付宝加解密文档:AES配置文档AES加解密文档

import (
    "github.com/joesonm/gopay/alipay"
    "github.com/joesonm/gopay/pkg/xlog"
)

// 换取授权访问令牌(默认使用utf-8,RSA2)
//    appId:应用ID
//    privateKey:应用私钥,支持PKCS1和PKCS8
//    grantType:值为 authorization_code 时,代表用code换取;值为 refresh_token 时,代表用refresh_token换取,传空默认code换取
//    codeOrToken:支付宝授权码或refresh_token
rsp, err := alipay.SystemOauthToken(appId, privateKey, grantType, codeOrToken)

// 解密支付宝开放数据带到指定结构体
//    以小程序获取手机号为例
phone := new(alipay.UserPhone)
// 解密支付宝开放数据
//    encryptedData:包括敏感数据在内的完整用户信息的加密数据
//    secretKey:AES密钥,支付宝管理平台配置
//    beanPtr:需要解析到的结构体指针
err := alipay.DecryptOpenDataToStruct(encryptedData, secretKey, phone)
xlog.Debugf("%+v", phone)

赞赏多少是您的心意,感谢支持!

微信赞赏码: 支付宝赞助码:

License

Copyright 2019 Jerry

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Documentation

Index

Constants

View Source
const (
	NULL     = ""
	SUCCESS  = "SUCCESS"
	FAIL     = "FAIL"
	OK       = "OK"
	DebugOff = 0
	DebugOn  = 1
	Version  = "1.5.80"
)

Variables

View Source
var (
	MissWechatInitParamErr = errors.New("missing wechat init parameter")
	MissAlipayInitParamErr = errors.New("missing alipay init parameter")
	MissPayPalInitParamErr = errors.New("missing paypal init parameter")
	MissParamErr           = errors.New("missing required parameter")
	MarshalErr             = errors.New("marshal error")
	UnmarshalErr           = errors.New("unmarshal error")
	SignatureErr           = errors.New("signature error")
	VerifySignatureErr     = errors.New("verify signature error")
	CertNotMatchErr        = errors.New("cert not match error")
	GetSignDataErr         = errors.New("get signature data error")
)

Functions

This section is empty.

Types

type BodyMap

type BodyMap map[string]interface{}

func (BodyMap) CheckEmptyError added in v1.5.57

func (bm BodyMap) CheckEmptyError(keys ...string) error

func (BodyMap) EncodeAliPaySignParams added in v1.5.57

func (bm BodyMap) EncodeAliPaySignParams() string

("bar=baz&foo=quux") sorted by key.

func (BodyMap) EncodeURLParams added in v1.5.57

func (bm BodyMap) EncodeURLParams() string

("bar=baz&foo=quux") sorted by key.

func (BodyMap) EncodeWeChatSignParams added in v1.5.57

func (bm BodyMap) EncodeWeChatSignParams(apiKey string) string

("bar=baz&foo=quux") sorted by key.

func (BodyMap) Get

func (bm BodyMap) Get(key string) string

获取参数,同 GetString()

func (BodyMap) GetInterface added in v1.5.57

func (bm BodyMap) GetInterface(key string) interface{}

获取原始参数

func (BodyMap) GetString added in v1.5.57

func (bm BodyMap) GetString(key string) string

获取参数转换string

func (BodyMap) JsonBody added in v1.5.57

func (bm BodyMap) JsonBody() (jb string)

func (BodyMap) MarshalXML added in v1.5.57

func (bm BodyMap) MarshalXML(e *xml.Encoder, start xml.StartElement) (err error)

func (BodyMap) Remove

func (bm BodyMap) Remove(key string)

删除参数

func (BodyMap) Reset added in v1.5.57

func (bm BodyMap) Reset()

置空BodyMap

func (BodyMap) Set

func (bm BodyMap) Set(key string, value interface{}) BodyMap

设置参数

func (BodyMap) SetBodyMap added in v1.5.57

func (bm BodyMap) SetBodyMap(key string, value func(b BodyMap)) BodyMap

func (BodyMap) SetFormFile added in v1.5.57

func (bm BodyMap) SetFormFile(key string, file *util.File) BodyMap

设置 FormFile

func (BodyMap) Unmarshal added in v1.5.72

func (bm BodyMap) Unmarshal(ptr interface{}) (err error)

Unmarshal to struct or slice point

func (*BodyMap) UnmarshalXML added in v1.5.57

func (bm *BodyMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err error)

type DebugSwitch added in v1.5.57

type DebugSwitch int8

Directories

Path Synopsis
apple 苹果应用内支付SDK(目前仅支持一个校验逻辑--服务端模式)。
apple 苹果应用内支付SDK(目前仅支持一个校验逻辑--服务端模式)。
@Author: wzy @Time: 2022/6/7
@Author: wzy @Time: 2022/6/7
pkg
aes
jwt
v3

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL