Giter VIP home page Giter VIP logo

gopay's Introduction

Logo was Loading Faild!

GoPay

微信、支付宝、QQ、通联支付、拉卡拉、PayPal 的 Golang 版本SDK

Github Github

Golang GoDoc Go GitHub Release License Go Report Card


一、安装

go get -u github.com/go-pay/gopay

查看 GoPay 版本

版本更新记录

import (
    "github.com/go-pay/gopay"
    "github.com/go-pay/xlog"
)

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


二、文档目录

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



三、其他说明

  • 如需自定义Log输出,请调用以下方法设置自定义Logger,实现 xlog.XLogger 接口即可。
    • xlog.SetDebugLog()
    • xlog.SetInfoLog()
    • xlog.SetWarnLog()
    • xlog.SetErrLog()
  • 各支付方式接入,请仔细查看 xxx_test.go 使用方式
    • gopay/wechat/v3/client_test.go
    • gopay/alipay/client_test.go
    • gopay/qq/client_test.go
    • gopay/allinpay/client_test.go
    • gopay/lakala/client_test.go
    • gopay/paypal/client_test.go
    • gopay/apple/verify_test.go
    • 或 examples
  • 接入gopay示例项目(可参考接入使用方式):gopay-platform
  • 有问题请加QQ群(加群验证答案:gopay) 或 加微信好友(备注:gopay开发)拉群。在此,非常感谢提出宝贵意见和反馈问题的同志们!
  • 开发过程中,请尽量使用正式环境,1分钱测试法!
  • 业余时间接各类业务外包项目开发(前端+后端,架构设计->系统开发->部署运营),如需要加微信联系。

QQ群: 加微信拉群:



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

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



鸣谢

GoLand A Go IDE with extended support for JavaScript, TypeScript, and Databases。

特别感谢 JetBrains 为开源项目提供免费的 GoLand 等 IDE 的授权

gopay's People

Contributors

charsunny avatar cmzz avatar cyjaysong avatar demonandangel avatar dependabot[bot] avatar dzwvip avatar elegantm avatar elricli avatar f2xb avatar fr4nkhe avatar fxk2006 avatar fyyang avatar icpd avatar igoogle-ink avatar itltf512116 avatar ixugo avatar jayenlee avatar jetereting avatar joesonm avatar kerbalwzy avatar kucoffee94 avatar laogeng660 avatar larryclean avatar lostroy avatar philo-veritas avatar skyling avatar tangbo1430 avatar to2false avatar xiaozuo7 avatar zhucheer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gopay's Issues

client.AddCertFilePath() 失效

版本:v1.5.14 - v1.5.16
测试发现client.AddCertFilePath()方法没有生效;
目前只能在client.Refund()中传入证书地址才有效;

支付宝model里面expiredIn 好像都是int类型

type authTokenAppResponse struct {
	Code            string `json:"code,omitempty"`
	Msg             string `json:"msg,omitempty"`
	SubCode         string `json:"sub_code,omitempty"`
	SubMsg          string `json:"sub_msg,omitempty"`
	UserId          string `json:"user_id,omitempty"`
	AuthAppId       string `json:"auth_app_id,omitempty"`
	AppAuthToken    string `json:"app_auth_token,omitempty"`
	AppRefreshToken string `json:"app_refresh_token,omitempty"`
	ExpiresIn       string `json:"expires_in,omitempty"`
	ReExpiresIn     string `json:"re_expires_in,omitempty"`
	Tokens          []*struct {
		AppAuthToken    string `json:"app_auth_token,omitempty"`
		AppRefreshToken string `json:"app_refresh_token,omitempty"`
		AuthAppId       string `json:"auth_app_id,omitempty"`
		ExpiresIn       string `json:"expires_in,omitempty"`
		ReExpiresIn     string `json:"re_expires_in,omitempty"`
		UserId          string `json:"user_id,omitempty"`
	} `json:"tokens,omitempty"`
}

这里面的ExpiresIn 好像都是int类型,或者有没有办法强制转成string

支付方式

希望作者补全苹果支付和谷歌支付

支付宝授权获取用户信息, sign报错

body := make(gopay.BodyMap)
body.Set("grant_type", "authorization_code")
body.Set("code", authCode)
//发起请求
aliRsp, err := client.SystemOauthToken(body)
if err != nil {
fmt.Println("err:", err)
}
fmt.Println(aliRsp)
通过其它sdk 测试参数没有错误,生成签名的时候报错
报错
err: asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:13 isCompound:true}) {optional:false explicit:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} @5

支付宝App支付后回调通知验证签名

现在VerifyAliPaySign都是直接用AliPayPublicKey字符串来做验签的,没有通过crt文件来验签。
crt文件读出来的SN字符怎么来做验签?您有空加一下?我自己也看看怎么搞。

不兼容版本更改

不兼容的更改最好安装go module规则来
不兼容更新,需要升级大版本号

异步通知验签的时候提示:verify sign error: crypto/rsa: verification error

var client = alipay.NewClient(fmt.Sprintf("%d", appId), privateKey, true).SetNotifyUrl("XXXXX")


func ParseNotifyAndVerifySign(req *http.Request) (bool, *webHook) {
	// 解析请求参数
	bm, err := alipay.ParseNotifyToBodyMap(req)

	if err != nil {
		fmt.Println("err:", err)
		return false, nil
	}
	fmt.Println("notifyReq:", bm)

	// 验签
	ok, err := alipay.VerifySign(publicKey, bm)
	if err != nil || !ok {
		fmt.Println("err:", err)
		return false, nil
	}

	log.Println("支付宝验签是否通过:", ok)

	……
}

请问问题出在哪里呢

微信签名算法需过滤空值

image
参考文档:
微信签名算法

签名生成的通用步骤如下:

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:

◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

使 BodyMap Set func 支持链式调用?

body.Set("out_biz_no", out_biz_no)
body.Set("payee_type", "ALIPAY_LOGONID")

e.g.

func (bm BodyMap) Set(key string, value interface{}) BodyMap {
    ...
    return bm
}
body.Set("out_biz_no", out_biz_no).Set("payee_type", "ALIPAY_LOGONID")

DecryptOpenDataToBodyMap方法经常返回错误

有时可以,有时错误,错误提示:json.Marshal(�� Q ˮ ń Ӈ , }��2W +q�$?ɘ ʏ j q/ ԁX G i| : p � (ӵ& b x06�ܵr\ Hü /R ↵ 6y +we . G (| f ' �3 V? ��' �� o1 9Cx X ���Qw):invalid character '\x1f' looking for beginning of value,错误信息一串乱码,invalid character '\x1f'单引号里的值是变化的。这是什么原因?

使用v1.5.22 下载库报错

go: downloading github.com/iGoogle-ink/gopay v1.5.22
verifying github.com/flosch/pongo2/[email protected]: checksum mismatch
downloaded: h1:6eZe8NSNxtTTGwXgJqqXiiLEDAj7CvkwiYrZFQRW6cQ=
go.sum: h1:89EuG/yHG6NE7KFmeg5GwnHYiiPQQXA1SGr12O9umVE=

SECURITY ERROR

在alipay.SystemOauthToken 换取授权访问令牌那发现几个问题

在SystemOauthToken 换取授权访问令牌那发现几个问题。选择的加签模式是公钥证书模式,没加app_cert_sn和alipay_root_cert_sn字段通不过验签.最后return没返回值报错.报错不提示rsp.ErrorResponse.SubMsg里面的报错信息问题.没判断是否请求成功就返回rsp

获取参数签名出错 getRsaSign()函数

asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:13 isCompound:true}) {optional:false explicit:false application:false private:false defaultValue: tag: stringType: 0 timeType: 0 set: false omitEmpty:false} @5asn1: structure error: tags don't match (2 vs {class:0 tag:16 length:13 isCompound:true}) {optional:false explicit:false application:false private:false defaultValue: tag: stringType: 0 timeType: 0 set: false omitEmpty:false} @5

支付宝接口 alipay.trade.app.pay 直接返回、不发起 HTTP 请求

想请教一下,为什么有部分接口直接返回参数呢?
alipay/client.go:687
doAliPay

// ...
	switch method {
	case "alipay.trade.app.pay":
		return []byte(param), nil
	case "alipay.trade.wap.pay", "alipay.trade.page.pay", "alipay.user.certify.open.certify":
		if !a.IsProd {
			return []byte(sandboxBaseUrl + "?" + param), nil
		}
		return []byte(baseUrl + "?" + param), nil
	default:
		httpClient := xhttp.NewClient()
// ...

在这里针对固定的几个接口,直接返回了参数,而默认的 default 是会请求支付宝的。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.