Golang 对接宝付、通联、富友金账户...填坑记

Golang 对接宝付、通联、富友金账户...填坑记,第1张

概述一、宝付私钥加密,公钥解密   由于对RSA加密解密原理不是很熟悉,宝付也没有Golang的Demo提供。Go语言库里一般都是私钥解密、公钥加密,或者私钥签名、公钥验签。宝付需要反过来,这里也到好找到了https://github.com/farmerx/gorsa的实现,但始终宝付那边提示签名验证失败。然后就继续找其他的实现了,这就惨了各种Google完全无解。最后回过头来只能,使用加解密原文,

一、宝付私钥加密,公钥解密

  由于对RSA加密解密原理不是很熟悉,宝付也没有Golang的Demo提供。Go语言库里一般都是私钥解密、公钥加密,或者私钥签名、公钥验签。宝付需要反过来,这里也到好找到了https://github.com/farmerx/gorsa的实现,但始终宝付那边提示签名验证失败。然后就继续找其他的实现了,这就惨了各种Google完全无解。最后回过头来只能,使用加解密原文,跟.Net平台的结果进行比对。一通折腾或者叫折磨之后,发现其实只是每次加密多了117个字节的全是0,后面的加密结果居然是跟其他平台一样的。由此对armerxgorsa做了如下修改,成功。

  这个前后花了3天时间。虽然解决问题的方式最终很简单,但是找到这条路的过程可真是披荆斩棘。

二、通联密钥解析

  宝付的密钥直接使用Go语言包就可以解析了,但是通联的就棘手了。给出的P12文件是windows下的,继续Bing。好在很快就有了结果,当然还是最大同性交流平台https://github.com/ikaiguang/go-allinpay。虽然参考代码有了,不过还是遇到麻烦事。让朋友Mac电脑上密钥转换出来的pem文件总是解析失败,1.2K,比能解析的大一些。

  这个时候想起来Win10包含linux子系统了,之前已经安装过,但还没怎么玩过。刚好可以尝试下。 *** 作依然很微软——生产力平台。1.windows功能里启用2.Win10应用商城里搜索Ubuntu,安装即可。3.直接使用linux 子系统做一些事情啦!

  找到待转换密钥所在路径,执行以下命令。

  

openssl pkcs12 -nocerts -nodes -in 20060400000491004.p12 -out 20060400000491004.pemopenssl x509 -inform DER -in allinpay-pdsDev.cer -out allinpay-pdsDev.pem

 

三、富友金账户密钥

  有前面这些个坑,基本上平的差不多之后,对支付平台的加解密基本熟悉了,然后对接金账户就轻松多了。简单的尝试了一下,密钥。最终直接使用Java版本的即可,只不过私钥使用PKCS1解析,公钥使用PKIxpublicKey进行解析。

func init() {    carfile,err := IoUtil.Readfile("Assets/prkey.key")    if err != nil {        return    }    pemBlock,_ := pem.Decode(carfile)    if pemBlock == nil {        return    }    parsedKey,err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes)    if err != nil {        return    }    jzhSignaKey = parsedKey    verify,err := IoUtil.Readfile("Assets/pbkey.key")    if err != nil {        return    }    block,_ := pem.Decode(verify)    if block == nil {        return    }    pub,err := x509.ParsePKIxpublicKey(block.Bytes)    if err != nil {        return    }    jzhVerfyKey = pub.(*rsa.PublicKey)}

四、获取XML中的子内容

  基本上加解密趟完之后,其他的都是小问题了。熟悉Golang的基本库就可以了。从富友返回的XML里截取出验签所需的明文,很是怀念大.Net 的优良封装。一个方法就好了,起初也想照着这个套路来找Golang的实现,貌似Golang里的XML解析,不借助其他第三方库的情况下,主要就两种1.解析为Struct;2.不知道XML实际内容按XML基本属性解析。

  最后使用正则表达式,截取的。

var plainTxt=xmlDoc.Element("plain")?.ToString(SaveOptions.disableFormatting)

五、业务接口对接

  其他就剩下主要业务接口的具体对接实现了。主要示例如下:完成了金账户的注册、宝付的裸扣、通联快捷代扣。代码开源在 https://github.com/KendoCross/KendoPay 上,未来打算继续完善和对接易宝等其他各大支付平台。

package kendopayimport (    "fmt"    "testing"    "time")//金账户注册func TestJzhReg(t *testing.T) {    jzhRegInfo := JzhRegister{        CstmNM:   "王道",CertifTP: "0",CertifID: "612429198812220777",MobileNo: "13410100777",// 手机号码        CityID:   "5840",// 开户行地区        BankID:   "113",//银行        BankNm:   "深圳支行",//支行名称        ActNo:    "6230580000144090777",//账户        Remark:   "胡乱备注",//备注    }    Register(jzhRegInfo)    fmt.Println("---------------------金账户注册------------------------------------------")    fmt.Println()}//通联快捷支付func TestTLQuickPay(t *testing.T) {    // 请求参数    fastTrx := QuickTradeReqFASTTRX{        BUSInesS_CODE: "19900",// 业务代码        submit_TIME:   time.Now().Format("20060102150405"),// 提交时间(YYYYMMDDHHMMSS)        AGRMNO:        "AIP9549180803000001424",// 协议号(签约时返回的协议号)        ACCOUNT_NO:    "6214850219949549",// 账号(借记卡或xyk)        ACCOUNT_name:  "幸福",// 账号名(借记卡或xyk上的所有人姓名)        AMOUNT:        "12345",// 金额(整数,单位分)        CURRENCY:      "CNY",// 货币类型(人民币:CNY,港元:HKD,美元:USD。不填时,默认为人民币)        ID_TYPE:       "0",// 开户证件类型(0身份z,1户口簿,2护照,3军官证,4士兵证...)        ID:            "370613198705308692",// 证件号        TEL:           "18689262774",// 手机号        CUST_USERID:   "github.com/ikaiguang",// 自定义用户号(商户自定义的用户号,开发人员可当作备注字段使用)        SUMMARY:       "交易附言",// 交易附言(填入网银的交易备注)        REMARK:        "不备注",// 备注(供商户填入参考信息)    }    result,err := Allinpay.Collect(fastTrx)    if err != nil {        fmt.Printf("%#v \n",err)    }    fmt.Println(result)    fmt.Println("---------------------通联快捷支付------------------------------------------")    fmt.Println()}//宝付裸扣func TestBFbareCollect(t *testing.T) {    Baofoo.bareCollect()    fmt.Println("---------------------宝付裸扣------------------------------------------")    fmt.Println()}
总结

以上是内存溢出为你收集整理的Golang 对接宝付、通联、富友金账户...填坑记全部内容,希望文章能够帮你解决Golang 对接宝付、通联、富友金账户...填坑记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存