wechat

package
v0.0.0-...-a5168ab Latest Latest
Warning

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

Go to latest
Published: Nov 3, 2019 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// WePayHost base host
	WePayHost = `https://api.mch.weixin.qq.com`

	// WePayURLUnifiedOrder pay 付款
	WePayURLUnifiedOrder = `/pay/unifiedorder`
	// WePayURLUnifiedQuery order query 订单查询
	WePayURLUnifiedQuery = `/pay/orderquery`
	// WePayURLPayRefund pay refund 退款
	WePayURLPayRefund = `/secapi/pay/refund`
	// WePayURLPapPay 委托代扣申请扣款
	WePayURLPapPay = `/pay/pappayapply`
	// WePayURLPapayEntrust H5 纯签约
	WePayURLPapayEntrust = `/papay/h5entrustweb`

	// WePayTradeTypeJS JSAPI 公众号支付
	WePayTradeTypeJS = `JSAPI`
	// WePayTradeTypeNative NATIVE 扫码支付
	WePayTradeTypeNative = `NATIVE`
	// WePayTradeTypeAPP APP APP支付
	WePayTradeTypeAPP = `APP`

	// WeOrderPaySuccess pay ok
	WeOrderPaySuccess = 0
)
View Source
const (
	// TokenExpires token expires time 1 hours
	TokenExpires = 60 * 60
	// BaseURL api host
	BaseURL = `https://api.weixin.qq.com`
	// OpenURL open host
	OpenURL = `https://open.weixin.qq.com`
)

Variables

View Source
var (
	// WePayTradeState 交易状态
	WePayTradeState = map[string]int{"SUCCESS": 0, "REFUND": 2, "NOTPAY": 3, "CLOSED": 4, "REVOKED": 5, "USERPAYING": 6, "PAYERROR": 7}
)

Functions

func PayCheck

func PayCheck(reply WePayReply) (ok bool, err error)

PayCheck check reply

func PayNotifyCheck

func PayNotifyCheck(reply FormWePayNotify) (ok bool, err error)

PayNotifyCheck check reply

func PayRefundCheck

func PayRefundCheck(reply WePayRefundReply) (ok bool, err error)

PayRefundCheck check refund reply

func Random

func Random(n int) string

Random 指定长度的随机字符串(字母或数字)

func Sign

func Sign(req map[string]interface{}, key string) (sign string)

Sign 微信计算签名的函数

Types

type Client

type Client struct {
	AppID          string `json:"appid"`
	AppSecret      string `json:"appsecret"`
	Token          string `json:"token"`
	EncodingAESKey string `json:"encodingaeskey"`

	AccessToken   string
	LastTokenTime int64

	Ticket         string
	LastTicketTime int64
}

Client wechat

func NewClient

func NewClient(appID, appSecret, token, encodingAESKey string) *Client

NewClient new client

func (Client) GetCodeURL

func (wc Client) GetCodeURL(redirectURL, state string) (uri string)

GetCodeURL get code 授权获取 OpenID URL /connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 转向到 redirect_uri/?code=CODE&state=STATE

func (Client) GetMaterial

func (wc Client) GetMaterial(mtype string, offset, count int) (res Material, err error)

GetMaterial 永久资料

func (Client) GetOpenID

func (wc Client) GetOpenID(code string) (res Response, err error)

GetOpenID 获取 OpenID /sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

func (Client) GetSignPackage

func (wc Client) GetSignPackage(uri, nonceStr string) (sign SignPackage, err error)

GetSignPackage JS 签名

uri      当前 URL
nonceStr 随机字符串

func (Client) GetUserInfo

func (wc Client) GetUserInfo(openid string) (res UserInfo, err error)

GetUserInfo user info

func (Client) GetUserList

func (wc Client) GetUserList(nextOpenID string) (res UserList, err error)

GetUserList user list

func (Client) SendTemplateMessage

func (wc Client) SendTemplateMessage(template TemplateMessage) (res Response, err error)

SendTemplateMessage send template message POST /cgi-bin/message/template/send?access_token=ACCESS_TOKEN

type Entrust

type Entrust struct {
	XMLName       xml.Name `xml:"xml"`
	AppID         string   `xml:"appid"`
	MchID         string   `xml:"mch_id"`
	PlanID        string   `xml:"plan_id"`        // 协议模板id
	ContractCode  string   `xml:"contract_code"`  // 签约协议号
	RequestSerial int64    `xml:"request_serial"` // 商户请求签约时的序列号,要求唯一性。序列号主要用于排序,不作为查询条件

	Name      string `xml:"contract_display_account"` // 签约用户的名称
	NotifyURL string `xml:"notify_url"`               // 接受扣款结果异步回调通知的url,传输需要url encode
	//Ver       string `xml:"ver"`                      // 版本号, 固定值1.0
	Sign      string `xml:"sign"`      // 签名
	Timestamp int    `xml:"timestamp"` // 时间戳, 10位时间戳
	IP        string `xml:"clientip"`  // 用户客户端的真实IP地址

}

Entrust 申请签约

type EventTemplateReply

type EventTemplateReply struct {
	XMLName      xml.Name `xml:"xml"`
	ToUserName   string   `xml:"ToUserName"`
	FromUserName string   `xml:"FromUserName"`
	CreateTime   string   `xml:"CreateTime"`
	MsgType      string   `xml:"MsgType"`
	Event        string   `xml:"Event"`
	MsgID        string   `xml:"MsgID"`
	Status       string   `xml:"Status"`
}

EventTemplateReply event reply

type FormAuthorize

type FormAuthorize struct {
	Code  string `form:"code"`
	State string `form:"state"`
	URL   string `form:"url"`
}

FormAuthorize get code

type FormMaterial

type FormMaterial struct {
	Type   string `form:"type"`
	Offset int    `form:"offset"`
	Count  int    `form:"count"`
}

FormMaterial Material

type FormOpenID

type FormOpenID struct {
	OpenID string `form:"openid"`
}

FormOpenID openid

type FormSignature

type FormSignature struct {
	TimeStamp string `form:"timestamp" json:"timestamp"`
	Nonce     string `form:"nonce" json:"nonce"`
	Signature string `form:"signature" json:"signature"`
	Echostr   string `form:"echostr" json:"echostr"`
}

FormSignature signature

type FormWePayNotify

type FormWePayNotify struct {
	XMLName  xml.Name `xml:"xml" json:"_,omitempty"`
	AppID    string   `form:"appid" xml:"appid"`
	Attach   string   `form:"attach" xml:"attach"`
	BankType string   `form:"bank_type" xml:"bank_type"`
	CashFee  int      `form:"cash_fee" xml:"cash_fee"`
	FeeType  string   `form:"fee_type" xml:"fee_type"`

	MchID       string `form:"mch_id" xml:"mch_id"`
	IsSubscribe string `form:"is_subscribe" xml:"is_subscribe"`
	NonceStr    string `form:"nonce_str" xml:"nonce_str"`
	OpenID      string `form:"openid" xml:"openid"`
	OutTradeNo  string `form:"out_trade_no" xml:"out_trade_no"`

	ResultCode string `form:"result_code" xml:"result_code"`
	ReturnMsg  string `form:"return_msg" xml:"return_msg"`
	ReturnCode string `form:"return_code" xml:"return_code"`
	ErrCodeDes string `form:"err_code_des" xml:"err_code_des"`
	ErrCode    string `form:"err_code" xml:"err_code"`

	Sign     string `form:"sign" xml:"sign"`
	TimeEnd  string `form:"time_end" xml:"time_end"`
	TotalFee int    `form:"total_fee" xml:"total_fee"`

	TradeType     string `form:"trade_type" xml:"trade_type"`
	TransactionID string `form:"transaction_id" xml:"transaction_id"`
	ContractID    string `form:"contract_id" xml:"contract_id"`
}

FormWePayNotify notify

type List

type List struct {
	OpenID []string `json:"openid"`
}

List openid list

type Material

type Material struct {
	TotalCount int    `json:"total_count"`
	ItemCount  int    `json:"item_count"`
	Item       []item `json:"item"`
}

Material 素材

type Message

type Message struct {
	XMLName      xml.Name `xml:"xml"`
	ToUserName   string   `xml:"ToUserName" json:"ToUserName"`
	FromUserName string   `xml:"FromUserName" json:"FromUserName"`
	CreateTime   int32    `xml:"CreateTime" json:"CreateTime"`
	MsgType      string   `xml:"MsgType" json:"MsgType"`
	MsgID        int64    `xml:"MsgId" json:"MsgId"`
}

Message message

type MiniProgramPage

type MiniProgramPage struct {
	AppID    string `json:"appid,omitempty"`
	PagePath string `json:"pagepath,omitempty"`
}

MiniProgramPage mini

type OrderQuery

type OrderQuery struct {
	XMLName       xml.Name `xml:"xml"`
	AppID         string   `xml:"appid"`
	MchID         string   `xml:"mch_id"`
	NonceStr      string   `xml:"nonce_str"`
	TransactionID string   `xml:"transaction_id,omitempty"`
	OutTradeNo    string   `xml:"out_trade_no,omitempty"`
	Sign          string   `xml:"sign"`
}

OrderQuery https://api.mch.weixin.qq.com/pay/orderquery

type PapPay

type PapPay struct {
	XMLName        xml.Name `xml:"xml"`
	AppID          string   `xml:"appid"`
	MchID          string   `xml:"mch_id"`
	NonceStr       string   `xml:"nonce_str"`        // 随机字符串,不长于32位
	Sign           string   `xml:"sign"`             // 签名
	Body           string   `xml:"body"`             // 商品或支付单简要描述, max 32
	Detail         string   `xml:"detail"`           // 商品名称明细列表, 8192
	Attach         string   `xml:"attach"`           // 附加数据,在查询API和支付通知中原样返回
	OutTradeNo     string   `xml:"out_trade_no"`     // 商户系统内部的订单号, 32个字符内、可包含字母
	TotalFee       int      `xml:"total_fee"`        // 订单总金额,单位为分,只能为整数
	SpbillCreateIP string   `xml:"spbill_create_ip"` // 调用微信支付API的机器IP
	NotifyURL      string   `xml:"notify_url"`       // 接受扣款结果异步回调通知的url
	ContractID     string   `xml:"contract_id"`      // 委托代扣协议id

	OpenID    string `xml:"openid"`    // OpenID
	Mobile    string `xml:"mobile"`    // 手机号
	Creid     string `xml:"creid"`     // 身份证号码
	Timestamp int    `xml:"timestamp"` // 时间戳, 10位时间戳
}

PapPay 委托代扣申请扣款

type Response

type Response struct {
	ErrCode int    `json:"errcode"`
	ErrMsg  string `json:"errmsg"`

	// token
	AccessToken string `json:"access_token"`
	ExpiresIn   int    `json:"expires_in"`

	// openid
	RefreshToken string `json:"refresh_token"`
	OpenID       string `json:"openid"`
	Scope        string `json:"scope"`

	// user info
	NickName   string `json:"nickname"`
	Sex        string `json:"sex"`
	Province   string `json:"province"`
	City       string `json:"city"`
	Country    string `json:"country"`
	HeadImgURL string `json:"headimgurl"`
	Privilege  string `json:"privilege"`
	UnionID    string `json:"unionid"`

	// template message
	MsgID int64 `json:"msgid"`

	// jsapi_ticket
	Ticket string `json:"ticket"`
}

Response response

type ResponseMsg

type ResponseMsg struct {
	ErrCode int    `json:"errcode"`
	ErrMsg  string `json:"errmsg"`
}

ResponseMsg response

type Server

type Server struct {
	AppID          string `json:"appid"`
	AppSecret      string `json:"appsecret"`
	Token          string `json:"token"`
	EncodingAESKey string `json:"encodingaeskey"`
}

Server wechat

func NewServer

func NewServer(appID, appSecret, token, encodingAESKey string) *Server

NewServer new Server

func (Server) Echo

func (wc Server) Echo(s FormSignature) (data string, err error)

Echo notify echo GET

type SignPackage

type SignPackage struct {
	AppID     string `json:"appId"`
	NonceStr  string `json:"nonceStr"`
	Timestamp int64  `json:"timestamp"`
	Signature string `json:"signature"`
	URL       string `json:"url"`
}

SignPackage sign package

type TemplateData

type TemplateData struct {
	First    *ValueColor `json:"first"`
	Keyword1 *ValueColor `json:"keyword1,omitempty"`
	Keyword2 *ValueColor `json:"keyword2,omitempty"`
	Keyword3 *ValueColor `json:"keyword3,omitempty"`
	Keyword4 *ValueColor `json:"keyword4,omitempty"`
	Keyword5 *ValueColor `json:"keyword5,omitempty"`
	Remark   *ValueColor `json:"remark,omitempty"`
}

TemplateData data

type TemplateMessage

type TemplateMessage struct {
	ToUser      string           `json:"touser"`
	TemplateID  string           `json:"template_id"`
	URL         string           `json:"url"`
	MiniProgram *MiniProgramPage `json:"miniprogram,omitempty"`
	Data        TemplateData     `json:"data"`
}

TemplateMessage template message

type UnifiedOrder

type UnifiedOrder struct {
	XMLName        xml.Name `xml:"xml"`
	AppID          string   `xml:"appid"`
	MchID          string   `xml:"mch_id"`
	Body           string   `xml:"body"`
	NonceStr       string   `xml:"nonce_str"`
	NotifyURL      string   `xml:"notify_url"`
	TradeType      string   `xml:"trade_type"`
	OpenID         string   `xml:"openid"`
	SpbillCreateIP string   `xml:"spbill_create_ip"`
	TimeStart      string   `xml:"time_start"`
	TotalFee       int      `xml:"total_fee"`
	OutTradeNo     string   `xml:"out_trade_no"`
	Attach         string   `xml:"attach"`
	Sign           string   `xml:"sign"`
}

UnifiedOrder https://api.mch.weixin.qq.com/pay/unifiedorder

type UserInfo

type UserInfo struct {
	SubScribe      int    `json:"subscribe"`
	OpenID         string `json:"openid"`
	NickName       string `json:"nickname"`
	Sex            int    `json:"sex"`
	Language       string `json:"language"`
	City           string `json:"city"`
	Province       string `json:"province"`
	Country        string `json:"country"`
	HeadImgURL     string `json:"headimgurl"`
	SubscribeTime  int    `json:"subscribe_time"`
	UnionID        string `json:"unionid"`
	Remark         string `json:"remark"`
	GroupID        int    `json:"groupid"`
	TagidList      []int  `json:"tagid_list"`
	SubscribeScene string `json:"subscribe_scene"`
	QrScene        int    `json:"qr_scene"`
	QrSceneStr     string `json:"qr_scene_str"`
}

UserInfo userinfo

type UserList

type UserList struct {
	Total      int    `json:"total"`
	Count      int    `json:"count"`
	Data       List   `json:"data"`
	NextOpenID string `json:"next_openid"`
}

UserList user list

type ValueColor

type ValueColor struct {
	Value string `json:"value"`
	Color string `json:"color,omitempty"`
}

ValueColor value color

type WePayConfig

type WePayConfig struct {
	AppID      string `json:"appid"`
	MchID      string `json:"mchid"`
	Key        string `json:"key"`
	AppSecret  string `json:"appsecret"`
	SSLCert    string `json:"sslcert"`
	SSLKey     string `json:"sslkey"`
	ContractID string `json:"contractid"`
	NotifyURL  string `json:"notify_url"`
}

WePayConfig WeChat pay configure

type WePayRefund

type WePayRefund struct {
	XMLName  xml.Name `xml:"xml"`
	AppID    string   `xml:"appid"`     // 公众账号 ID string(32)
	MchID    string   `xml:"mch_id"`    // 商户号 string(32)
	NonceStr string   `xml:"nonce_str"` // 随机字符串 string(32)
	Sign     string   `xml:"sign"`      // 签名 string(32)
	//SignType      string   `xml:"sign_type"`       // 签名类型, 默认 MD5 string(32), HMAC-SHA256 和 MD5
	OutTradeNo  string `xml:"out_trade_no"`  // 商户订单号
	OutRefundNo string `xml:"out_refund_no"` // 商户退款单号
	TotalFee    int    `xml:"total_fee"`     // 订单金额
	RefundFee   int    `xml:"refund_fee"`    // 退款金额
	//RefundFeeType string   `xml:"refund_fee_type"` // 退款货币种类, 款货币类型,需与支付一致,或者不填。符合ISO 4217标准的三位字母代码,默认人民币:CNY
	NotifyURL string `xml:"notify_url"` // 退款结果通知 url, 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数。如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效
}

WePayRefund https://api.mch.weixin.qq.com/secapi/pay/refund

type WePayRefundReply

type WePayRefundReply struct {
	XMLName       xml.Name `xml:"xml" json:"_,omitempty"`
	ReturnCode    string   `xml:"return_code"`
	ReturnMsg     string   `xml:"return_msg"`
	ResultCode    string   `xml:"result_code"`
	ErrCode       string   `xml:"err_code"`
	ErrCodeDes    string   `xml:"err_code_des"`
	AppID         string   `xml:"appid"`
	MchID         string   `xml:"mch_id"`
	NonceStr      string   `xml:"nonce_str"`
	Sign          string   `xml:"sign"`
	TransactionID string   `xml:"transaction_id"`
	OutTradeNo    string   `xml:"out_trade_no"`
	OutRefundNo   string   `xml:"out_refund_no"`
	RefundFee     int      `xml:"refund_fee"` // 退款金额
	TotalFee      int      `xml:"total_fee"`  // 标价金额, 订单总金额,单位为分,只能为整数
	FeeType       int      `xml:"fee_type"`   // 退款货币种类, 款货币类型,需与支付一致,或者不填。符合ISO 4217标准的三位字母代码,默认人民币:CNY
	CashFee       int      `xml:"cash_fee"`   // 现金支付金额
}

WePayRefundReply pay refund reply

func PayRefund

func PayRefund(config WePayConfig, order WePayRefund) (reply WePayRefundReply, err error)

PayRefund 退款

type WePayReply

type WePayReply struct {
	XMLName        xml.Name `xml:"xml" json:"_,omitempty"`
	ReturnCode     string   `xml:"return_code"`
	ReturnMsg      string   `xml:"return_msg"`
	AppID          string   `xml:"appid"`
	MchID          string   `xml:"mch_id"`
	NonceStr       string   `xml:"nonce_str"`
	Sign           string   `xml:"sign"`
	ResultCode     string   `xml:"result_code"`
	PrePayID       string   `xml:"prepay_id"`
	TradeType      string   `xml:"trade_type"`
	URL            string   `xml:"code_url"`
	ErrCode        string   `xml:"err_code"`
	ErrCodeDes     string   `xml:"err_code_des"`
	OpenID         string   `xml:"openid"`
	Attach         string   `xml:"attach"`
	IsSubscribe    string   `xml:"is_subscribe"`
	BankType       string   `xml:"bank_type"`
	CashFee        string   `xml:"cash_fee"`
	FeeType        string   `xml:"fee_type"`
	OutTradeNo     string   `xml:"out_trade_no"`
	TimeEnd        string   `xml:"time_end"`
	TotalFee       string   `xml:"total_fee"`
	TradeState     string   `xml:"trade_state"`
	TradeStateDesc string   `xml:"trade_state_desc"`
	TransactionID  string   `xml:"transaction_id"`
	ContractID     string   `form:"contract_id" xml:"contract_id"`
}

WePayReply pay reply

func H5Entrust

func H5Entrust(config WePayConfig, order Entrust) (reply WePayReply, err error)

H5Entrust H5纯签约

func PapPayApply

func PapPayApply(config WePayConfig, order PapPay) (reply WePayReply, err error)

PapPayApply 委托代扣申请扣款

func Pay

func Pay(config WePayConfig, order UnifiedOrder) (reply WePayReply, err error)

Pay pay

func PayQuery

func PayQuery(cpyid int, config WePayConfig, order OrderQuery) (reply WePayReply, err error)

PayQuery order query

Jump to

Keyboard shortcuts

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