smartwalle / alipay

支付宝 AliPay SDK for Go, 集成简单,功能完善,持续更新,支持公钥证书和普通公钥进行签名和验签,支持文件上传和接口内容加密。
MIT License
1.87k stars 424 forks source link

生成的url不带任何参数 #23

Closed skanger closed 7 years ago

skanger commented 7 years ago

`package tools

import ( "baby/controllers" "github.com/smartwalle/alipay" "github.com/astaxie/beego" )

var ( appID = "" partnerID = "**" //老版接口用

//RSA2签名 标准密钥格式除了首行和尾行外,每行64个字符
//这个是支付宝公钥

aliPublicKey = []byte(`-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+sfnysdoyMKAL/YUjWNa
   ....................
5Sw0RRDqARDnxBxijdhDn/iBLboSkS3veNMLmm0gGa8dSubkdnvW4gEOLG/LM8Zy
BQIDAQAB
-----END PUBLIC KEY-----`)

//
publicKey = []byte(`-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuyQ76zze1Abvvz7EL/pe
   ..................
SLKjRxEvNxqA5XQDpqO3JQKzzihaKd5CnD81e5erkMVAG51bNCeScw3jb3SJigU0
sQIDAQAB
-----END PUBLIC KEY-----`)

//RSA2签名 标准密钥格式除了首行和尾行外,每行64个字符
//这个是自己的私钥
privateKey = []byte(`-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAuyQ76zze1Abvvz7EL/peT3mMe8QlQO3ViqaMhpRVWO2vseI0
w3dP3F1Koqq9sdQas5kViontQ3FJeTqpcD5PtA/A6zVb+LYEj8/dzV09T+944ebt
    *************
EYr3L550lFWavk6KWh8f+BV+jq+aCh7jwPRspHuugTngjfTpAgYR
-----END RSA PRIVATE KEY-----
`)

)

type AlipayController struct { controllers.BaseController }

var client = alipay.New(appID, partnerID, publicKey, privateKey, false)

func init() { client.AliPayPublicKey = aliPublicKey }

// @router /api/alipay/test func (this *AlipayController) TestAlipayOrder() { var p = alipay.AliPayTradePagePay{} p.NotifyURL = "http://www.baituolebaby.com/alipay" p.ReturnURL = "http://www.baituolebaby.com/alipayCallback" p.Subject = "修正了中文的 Bug" p.OutTradeNo = "trade_no_20170623011" p.TotalAmount = "10.00" p.ProductCode = "FAST_INSTANT_TRADE_PAY" var url, e = client.TradePagePay(p) beego.Error(url.String()) this.ReturnSuccess("e", e) } `

我得到的url永远都只是https://openapi.alipaydev.com/gateway.do 而且无论我的私钥,公钥怎么乱填, 那个 代表错误的e永远都是nil

smartwalle commented 7 years ago

这个接口你要先申请对应的权限。

skanger commented 7 years ago

找到原因了: 是因为当我私钥填错了的时候 rsa2签名函数发出了错误,但是并没有返回error,所以一直返回空字符串 希望作者能够修改下。

顺便问下,取到url后怎么访问,支付宝文档说显示返回resposen.body就行,可是这个包返回了url,请问怎么取到response.body

smartwalle commented 7 years ago

你好,这个问题已经解决了,之前的代码有一些问题,请更新一下代码。

smartwalle commented 7 years ago

这个接口是不用和支付宝服务器端通信的。之前由于没有测试条件,所以我也是按照支付宝的文档来操作,调用了支付宝服务器端的接口,会返回提示钓鱼的信息。

这个接口只需要本地生成请求的参数信息,然后在浏览器里面直接访问即可。

所以调整后之后的 alipay.trade.page.pay 接口还是会返回一个url,你的服务器只需要把这个url返回给前端,前端直接在浏览器打开这个url即可。

skanger commented 7 years ago

这个钓鱼我问了支付宝客服两天都没找到原因,现在终于解决了