alipay

package module
v0.0.0-...-4b6b13a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2018 License: MIT Imports: 10 Imported by: 1

README

golang版支付宝SDK!

做最好的支付宝sdk,大家的支持就是作者最大的动力!

安装

go get github.com/ascoders/alipay

初始化

alipay := alipay.Client{
	Partner   : "", // 合作者ID
	Key       : "", // 合作者私钥
	ReturnUrl : "", // 同步返回地址
	NotifyUrl : "", // 网站异步返回地址
	Email     : "", // 网站卖家邮箱地址
}

alipay升级到2.0版本,api_v1.0依旧兼容

生成提交表单

form := alipay.Form(alipay.Options{
	OrderId:  "123",	// 唯一订单号
	Fee:      99.8,		// 价格
	NickName: "翱翔大空",	// 用户昵称,支付页面显示用
	Subject:  "充值100",	// 支付描述,支付页面显示用
})

将form输出到页面上,会自动跳转至支付宝收银台。

回调处理

回调分为同步异步,支付成功后跳转至商户页面成为同步回调,跳转地址在ReturnUrl参数中配置。支付宝每隔10 10 30 ... 秒发送一次异步请求称之为异步回调,通知地址在NotifyUrl中配置。

同步回调(依赖beego)

注意这里需要解析get请求参数,为了自动获取,请传入beego的&this.Controller

func (this *ApiController) Return() {
	result := alipay.Return(&this.Controller)
	if result.Status == 1 { //付款成功,处理订单
		//处理订单
	}
}

参数:

  • Partner // 合作者ID
  • Key // 合作者私钥
  • ReturnUrl // 同步返回地址
  • NotifyUrl // 网站异步返回地址
  • Email // 网站卖家邮箱地址

至于为什么没有给充值金额参数,因为金额不能代表问题,例如打折或者做活动,请自行查询订单表,根据业务逻辑进行处理。

同步回调(无依赖)

感谢@atnet提供的代码,让alipay支持原生http请求,脱离推框架的依赖。

func ReturnHandle(w http.ResponseWriter, r *http.Request) {
	result := alipay.NativeReturn(r)
	if result.Status == 1 { //付款成功,处理订单
		//处理订单
	}
}
异步回调(依赖beego)
func (this *ApiController) Notify() {
	result := alipay.Notify(&this.Controller)
	if result.Status == 1 { //付款成功,处理订单
		//处理订单
	}
}

异步回调的返回参数与同步回调相同。

异步回调(无依赖)
func NotifyHandle(w http.ResponseWriter, r *http.Request) {
	result := alipay.NativeNotify(r)
	if result.Status == 1 { //付款成功,处理订单
		//处理订单
	}
}

支付流程介绍

支付宝流程基本就四步:初始化、构造请求用户付款、同步跳转付款、异步post接收付款请求。

用户在您的网站点击支付按钮后,您的网站需要经历下述操作:

1.为该用户生成一个订单存入数据库,保存了该订单的唯一标识符,它可以是数据库的唯一id;该订单触发用户id;该订单充值用户id;充值金额;订单创建时间。上述是最基本要存储的订单数据。

2.调用此SDK让用户跳转到支付宝付款页面。

3.等待用户完成付款,此时如果用户没有关闭付款页面,大约3秒后会跳转到你网站指定的同步回调页面,如果用户关闭了网页,支付宝也会多次异步通知你的异步回调页面,这一切都是为了告诉你用户完成了付款。

4.处理订单,在同步回调页面异步回调页面调用此SDK,获取该订单ID,在数据库中查出并给相应账号充值(之后发邮件通知等等),一定要注意防止订单重复充值,你可以标记订单的active解决此问题。

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	AlipayPartner  string //合作者ID
	AlipayKey      string //合作者私钥
	WebReturnUrl   string //网站同步返回地址
	WebNotifyUrl   string //网站异步返回地址
	WebSellerEmail string //网站卖家邮箱地址
)

Functions

func AlipayNotify

func AlipayNotify(contro *beego.Controller) (int, string, string, string)

被动接收支付宝异步通知

func AlipayReturn

func AlipayReturn(contro *beego.Controller) (int, string, string, string)

被动接收支付宝同步跳转的页面

func CreateAlipaySign

func CreateAlipaySign(orderId string, fee float32, nickname string, subject string) string

生成支付宝即时到帐提交表单html代码 * @params string 订单唯一id * @params int 价格 * @params int 获得代金券的数量 * @params string 充值账户的名称 * @params string 充值描述

Types

type AliPayParameters

type AliPayParameters struct {
	InputCharset string  `json:"_input_charset"` //网站编码
	Body         string  `json:"body"`           //订单描述
	NotifyUrl    string  `json:"notify_url"`     //异步通知页面
	OutTradeNo   string  `json:"out_trade_no"`   //订单唯一id
	Partner      string  `json:"partner"`        //合作者身份ID
	PaymentType  uint8   `json:"payment_type"`   //支付类型 1:商品购买
	ReturnUrl    string  `json:"return_url"`     //回调url
	SellerEmail  string  `json:"seller_email"`   //卖家支付宝邮箱
	Service      string  `json:"service"`        //接口名称
	Subject      string  `json:"subject"`        //商品名称
	TotalFee     float32 `json:"total_fee"`      //总价
	Sign         string  `json:"sign"`           //签名,生成签名时忽略
	SignType     string  `json:"sign_type"`      //签名类型,生成签名时忽略
}

type AlipayParameters

type AlipayParameters struct {
	InputCharset string  `json:"_input_charset"` //网站编码
	Body         string  `json:"body"`           //订单描述
	NotifyUrl    string  `json:"notify_url"`     //异步通知页面
	OutTradeNo   string  `json:"out_trade_no"`   //订单唯一id
	Partner      string  `json:"partner"`        //合作者身份ID
	PaymentType  uint8   `json:"payment_type"`   //支付类型 1:商品购买
	ReturnUrl    string  `json:"return_url"`     //回调url
	SellerEmail  string  `json:"seller_email"`   //卖家支付宝邮箱
	Service      string  `json:"service"`        //接口名称
	Subject      string  `json:"subject"`        //商品名称
	TotalFee     float32 `json:"total_fee"`      //总价
	Sign         string  `json:"sign"`           //签名,生成签名时忽略
	SignType     string  `json:"sign_type"`      //签名类型,生成签名时忽略
}

type Client

type Client struct {
	Partner   string // 合作者ID
	Key       string // 合作者私钥
	ReturnUrl string // 同步返回地址
	NotifyUrl string // 网站异步返回地址
	Email     string // 网站卖家邮箱地址
}

func (*Client) Form

func (this *Client) Form(opts Options) string

生成支付宝即时到帐提交表单html代码

func (*Client) NativeNotify

func (this *Client) NativeNotify(r *http.Request) Result

被动接收支付宝异步通知

func (*Client) NativeReturn

func (this *Client) NativeReturn(r *http.Request) Result

被动接收支付宝同步跳转的页面

func (*Client) Notify

func (this *Client) Notify(contro *beego.Controller) *Result

被动接收支付宝异步通知

func (*Client) Return

func (this *Client) Return(contro *beego.Controller) *Result

被动接收支付宝同步跳转的页面

type Options

type Options struct {
	OrderId  string  // 订单唯一id
	Fee      float32 // 价格
	NickName string  // 充值账户名称
	Subject  string  // 充值描述
}

生成订单的参数

type Result

type Result struct {
	// 状态
	Status int
	// 本网站订单号
	OrderNo string
	// 支付宝交易号
	TradeNo string
	// 买家支付宝账号
	BuyerEmail string
	// 错误提示
	Message string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL