alipay.trade.wap.pay手机网站支付接口alipay.trade.page.pay电脑网站支付接口alipay.trade.close统一收单交易关闭接口alipay.trade.query统一收单线下交易查询alipay.trade.refund统一收单交易退款接口alipay.trade.fastpay.refund.query统一收单交易退款查询接口alipay.data.dataservice.bill.downloadurl.query查询对账单下载地址
支付宝应用创建及配置参见支付宝快速接入介绍,也可使用支付宝沙箱环境进行测试开发
go get github.com/lyp256/alipayimport "github.com/lyp256/alipay"priByte, err := ioutil.ReadFile("pri.txt")
if err != nil {
log.Fatalln("私钥文件读取失败")
}
pubByte, err := ioutil.ReadFile("pub.txt")
if err != nil {
log.Fatalln("公钥文件读取失败")
}
payClick, _ = alipay.NewAlipay(priByte, pubByte, "APPID", "支付宝网关地址", alipay.ST_RSA2)
payClick.SetNotifyUrl("默认通知地址")所有请求分三步完成
-
创建业务:调用 alipay.NewWapPay,alipay.NewPagePay,alipay.NewQuery 等方法传入必要参数会返回业务 struct,调用业务 struct 的 SetXXX 方法(如:SetTimeExpire,SetBody 等)可改变业务参数.
-
创建请求:调用 alipay.WapPay,alipay.PagePay 等方法传入业务 struct 返回请求 struct, 调用该 struct 的 SetXXX 方法(如: SetReturnUrl,SetNotifyUrl 等)可以修改公共参数
-
调用请求 struct 的 Build() 方法返回请求链接
创建业务请求时传入必要参数
// 创建一个手机支付订单
wapOrder, err := alipay.NewWapPay("唯一订单号", "标题", 9.9 /*价格*/)
if err!=nil{
fmt.Println(err)
}
// 设置支付超时时间
wapOrder.SetTimeExpire(time.Now().Unix() + 180)
// 设置回跳地址并生成支付链接
url, _ := pay.WapPay(o).SetReturnUrl("http://lyp256.cn").Build()
fmt.Println("手机网站支付链接:", url)pageOrder, _ := alipay.NewPagePay("唯一订单号", "标题", 9.9)
url, _ := pay.PagePay(pageOrder).Build()
fmt.Println("电脑网站支付链接:", url)// 创建查询,两个订单号选择一个传入即可
query, _ := alipay.NewQuery("你自己创建订单时传入的订单号", "支付宝返回的订单号")
// 生成查询地址
url, _ := pay.QueryOrder(query).Build()
// 查询订单返回查询结果map,出错或者验签失败会返回空
resultMap, err:= pay.QueryOrderParams(query)
if err!=nil{
fmt.Println(err)
}
fmt.Println("查询地址:", url)
fmt.Println("查询结果:", resultMap)http.HandleFunc("/", func (writer http.ResponseWriter, request *http.Request) {
request.ParseForm()
err := pay.ValidateNotify(request.Form)
if err!=nil{
/*验证支付宝签名失败*/
}else{
/*验证支付宝签成功*/
// 业务处理代码
some code......
// 业务处理完成,返回success标识符.注意返回成功标志前后不可返回其他任意数据.
alipay.NotIfySuccess(writer)
}
})
http.ListenAndServe(":80", nil)欢迎提问或 Pull Request 联系我lyp256@gmail.com