alipay
所属分类:支付接口
开发工具:GO
文件大小:0KB
下载次数:0
上传日期:2018-07-23 12:31:29
上 传 者:
sh-1993
说明: 支付宝,,
(alipay,,)
文件列表:
aliParam.go (841, 2018-07-23)
alipay.go (1427, 2018-07-23)
alipayClient.go (4227, 2018-07-23)
const.go (890, 2018-07-23)
example/ (0, 2018-07-23)
example/alipay.go (2457, 2018-07-23)
example/const.go (891, 2018-07-23)
notify.go (1575, 2018-07-23)
pagepay.go (434, 2018-07-23)
payChan.go (475, 2018-07-23)
query.go (384, 2018-07-23)
transtoaccount.go (1768, 2018-07-23)
utils.go (747, 2018-07-23)
wappay.go (425, 2018-07-23)
# alipay
支付宝SDK(部分功能) go语言实现
支付宝api文档:[文档地址](https://docs.open.alipay.com/api)
## 安装
```bash
go get github.com/worldlove/alipay
```
## 开发理念
1. 简单
- 使用url.Values 和 map[string]string 表达数据结构
- 付宝重新设计之后,多数参数都是通用的,没必要为每个接口创建一个struct
- 直接可以使用ulr.Values.Encode()自动排序和编码
2. 高效
- 复用全局Alipay 客户端对象(必须在调用接口之前先初始化全局Alipay对象)
- 实现异步调用链,可以将转账、查询等操作发送到异步调用链,不会因网络延时阻塞主线程,降低响应时间
3. 统一
- 支付宝各种api调用,实质就是发送http请求,不过每个api的参数或返回值可能有一些差别
- AliClient 实现了通用的签名,验签,返回数据解析等接口,可以方便的生成各种API调用
## 使用示例
```go
// 初始化alipay客户端
import (
"github.com/worldlove/alipay"
"io/ioutil"
"log"
)
func init() {
initAliClient()
setDefaultParam()
}
// 初始化Alipay客户端
func initAliClient() {
const priPath = "secret/private.pem"
const pubPath = "secret/public.pem"
priKey, err1 := ioutil.ReadFile(priPath)
pubKey, err2 := ioutil.ReadFile(pubPath)
if err1 != nil || err2 != nil {
log.Println(err1, err2)
panic("RSAKey Read Error")
}
payClient := alipay.NewAliClient(
// 沙箱
// AliTestAppID
// AliTestGateway
AliAppID,
AliGateway,
AliSignType,
priKey,
pubKey,
// AliTestPubkey
AliPubKey,
)
alipay.SetAlipay(payClient)
}
// 设置基础公用参数
func setDefaultParam() {
var defaultSysBase = make(url.Values)
defaultSysBase.Add("sign_type", AliSignType)
defaultSysBase.Add("format", AliFormat)
defaultSysBase.Add("charset", AliCharset)
defaultSysBase.Add("version", AliVersion)
var defaultParam = alipay.AliParam{
SysBase: defaultSysBase,
}
alipay.SetDefaultParams("default", &defaultParam)
}
```
## 实现API
- [x] [电脑网页支付 API](#电脑网页支付-api)
- [x] [手机WAP支付 API](#手机wap支付-api)
- [x] [统一支付查询 API](#统一支付查询)
- [x] [账号转账 API](#账号转账-api)
- [x] [转账查询 API](#转账查询-api)
### 电脑网页支付宝 API
```go
// 设置电脑网站支付基础参数
func setDefaultPagePayParam() {
var base = alipay.GetDefaultParams("default")
//设置电脑网页支付特有公用参数
base.SysBase.Set("return_url", AliPagePayReturn)
base.SysBase.Set("notify_url", AliPagePayNotify)
//设置电脑网页支付默认业务字段
base.BizContent["timeout_express"] = "2d"
base.BizContent["product_code"] = "FAST_INSTANT_TRADE_PAY"
alipay.SetDefaultParams(alipay.AliPagePayMethod, base)
}
var content = map[string]string{
"out_trade_no": "123456789",
"total_amount": "1.11",
"subject": "名称",
"body": "描述",
"passback_params": "原样返回",
}
payURL := alipay.DefaultPagePay(content)
// 网页支付返回(参数为http.Request, 支持各种框架)
// 例:使用gin框架
func AlipayPageReturn(c *gin.Context) {
values, err := alipay.AlipayReturn(c.Request)
}
// 各种支付异步通知(参数为http.Request, 支持各种框架)
// 例:使用gin框架
func AlipayNotify(c *gin.Context) {
values, err := alipay.AlipayNotify(c.Request)
}
```
### 手机WAP支付 API
```go
// 设置Wap网站支付基础参数
func setDefaultWapPayParam() {
var base = alipay.GetDefaultParams("default")
//设置手机网页支付特有公用参数
base.SysBase.Set("return_url", AliPagePayReturn)
base.SysBase.Set("notify_url", AliPagePayNotify)
//设置手机网页支付默认业务字段
base.BizContent["timeout_express"] = "2d"
base.BizContent["product_code"] = "QUICK_WAP_WAY"
alipay.SetDefaultParams(alipay.AliWapPayMethod, base)
}
var content = map[string]string{
"out_trade_no": "123456789",
"total_amount": "1.11",
"subject": "名称",
"body": "描述",
"passback_params": "原样返回",
}
payURL := alipay.DefaultWapPay(content)
```
### 统一支付查询 API
```go
var payComment = map[string]string{
"out_trade_no": "123456789",
}
res, err := alipay.QueryTrade(payComment)
// 将查询异步话
// // 处理返回结果
func queryTradeReturn(alipay.Response, error) {
....
}
var action = alipay.PayAction{
Payload: payComment,
Action: alipay.QueryTrade,
Return: queryTradeReturn,
}
// 将相关事件插入异步链
alipay.PushPayActionToChan(action)
```
### 账号转账 API
```go
func setDefaultTransToAccountParam() {
var base = alipay.GetDefaultParams("default")
//设置转账支付公用基础参数
//设置转账支付公用业务参数
base.BizContent["payee_type"] = "ALIPAY_LOGINID"
base.BizContent["remark"] = "业务转账"
alipay.SetDefaultParams(alipay.AliTransToAccountMethod, base)
}
setDefaultTransToAccountParam()
var payComment = map[string]string{
"out_biz_no": "123456789",
"payee_account": "example@account.com",
"amount": "1.88",
}
res, err := alipay.DefaultTransToAccount(payComment)
// 插入异步链
var action = alipay.PayAction{
Payload: payComment,
Action: alipay.DefaultTransToAccount,
Return: proxyTransReturn,
}
alipay.PushPayActionToChan(&action)
```
### 转账查询 API
```go
var payComment = map[string]string{
"out_trade_no": "123456789",
}
res, err := alipay.QueryTransToAccount(payComment)
```
近期下载者:
相关文件:
收藏者: