pay

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2020 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Ignores = []string{"sign", "key", "xmlString", "xmlDoc", "couponList"}

Functions

This section is empty.

Types

type BaseWxPayRequest

type BaseWxPayRequest struct {
	XMLName xml.Name `xml:"xml" json:"-"`
	// 公众号或者小程序appId
	AppId string `json:"appid" xml:"appid"`
	// 商户号.
	MchId string `json:"mch_id" xml:"mch_id"`
	// 服务商模式下的子商户公众账号ID.
	SubAppId string `json:"sub_app_id,omitempty" xml:"sub_app_id,omitempty"`
	// 服务商模式下的子商户号.
	SubMchId string `json:"sub_mch_id,omitempty" xml:"sub_mch_id,omitempty"`
	// 随机字符串.不长于32位。推荐随机数生成算法
	NonceStr string `json:"nonce_str" xml:"nonce_str"`
	// 签名.
	Sign string `json:"sign,omitempty" xml:"sign,omitempty"`
	// 签名类型.
	SignType SignType `json:"sign_type" xml:"sign_type,omitempty"`
	// 企业微信签名
	WorkWxSign string `json:"work_wx_sign,omitempty" xml:"work_wx_sign,omitempty"`
}

type BaseWxPayResult

type BaseWxPayResult struct {
	common.Err
	RetMsg string `json:"retmsg" xml:"retmsg"`

	ReturnCode string `json:"return_code" xml:"return_code"`
	ReturnMsg  string `json:"return_msg" xml:"return_msg"`

	ResultCode string `json:"result_code" xml:"result_code"`
	ErrCode    string `json:"err_code" xml:"err_code"`
	ErrCodeDes string `json:"err_code_des" xml:"err_code_des"`
	AppId      string `json:"appid" xml:"appid"`
	MchId      string `json:"mch_id" xml:"mch_id"`
	SubAppId   string `json:"sub_app_id" xml:"sub_app_id"`
	SubMchId   string `json:"sub_mch_id" xml:"sub_mch_id"`
	NonceStr   string `json:"nonce_str" xml:"nonce_str"`
	Sign       string `json:"sign" xml:"sign"`
}

type Coupon

type Coupon struct {
	CouponType string `json:"coupon_type" xml:"coupon_type"`
	CouponId   string `json:"coupon_id" xml:"coupon_id"`
	CouponFee  int    `json:"coupon_fee" xml:"coupon_fee"`
}

func ComposeCoupons

func ComposeCoupons(value string) []*Coupon

type EntPayRequest

type EntPayRequest struct {
}

type EntPayResult

type EntPayResult struct {
}

type SignType

type SignType string
const (
	HmacSha256 SignType = "HMAC-SHA256"
	MD5        SignType = "MD5"
)

type TradeType

type TradeType string
const (
	JSAPI  TradeType = "JSAPI"
	NATIVE TradeType = "NATIVE"
	APP    TradeType = "APP"
	H5     TradeType = "MWEB"
	MICRO  TradeType = "MICROPAY"
)

type WxEntPayService

type WxEntPayService interface {
	EntPay(*EntPayRequest) *EntPayResult
}

type WxEntPayServiceImpl

type WxEntPayServiceImpl struct {
	// contains filtered or unexported fields
}

func (*WxEntPayServiceImpl) EntPay

type WxPayConfig

type WxPayConfig struct {
	AppId     string    `json:"app_id"`      // 公众号/小程序 appid
	MchId     string    `json:"mch_id"`      // 微信支付商户号.
	MchKey    string    `json:"mch_key"`     // 微信支付商户密钥.
	NotifyUrl string    `json:"notify_url"`  // 微信支付异步回掉地址,通知url必须为直接可访问的url,不能携带参数.
	KeyPath   string    `json:"key_path"`    // apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定.
	SubAppId  string    `json:"sub_app_id"`  // 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除.
	SubMchId  string    `json:"sub_mch_id"`  // 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除.
	TradeType TradeType `json:"trade_type"`  // 交易类型.
	SignType  SignType  `json:"sign_type"`   // 签名方式.
	EntPayKey string    `json:"ent_pay_key"` // 企业支付密钥.

	PrivateKeyPath     string `json:"private_key_path"`     // apiv3 商户apiclient_key.pem
	PrivateCertPath    string `json:"private_cert_path"`    // apiv3 商户apiclient_cert.pem
	ApiV3Key           string `json:"api_v_3_key"`          // apiV3 秘钥值.
	CertSerialNo       string `json:"cert_serial_no"`       // apiV3 证书序列号值
	ServiceId          string `json:"service_id"`           // 微信支付分serviceId
	PayScoreNotifyUrl  string `json:"pay_score_notify_url"` // 微信支付分回调地址
	PrivateKey         string `json:"private_key"`          // 私钥信息
	ApiV3HttpClient    string `json:"api_v_3_http_client"`
	CertAutoUpdateTime int    `json:"cert_auto_update_time"` // 证书自动更新时间差(分钟),默认一分钟
	KeyContent         []byte `json:"key_content"`           //  p12证书文件内容的字节数组.

	PayBaseUrl            string `json:"pay_base_url"`            // 微信支付接口请求地址域名部分.
	HttpConnectionTimeout int    `json:"http_connection_timeout"` // http请求连接超时时间 5000
	HttpTimeout           int    `json:"http_timeout"`            // http请求数据读取等待时间 10000

	UseSandboxEnv     bool   `json:"use_sandbox_env"`
	IfSaveApiData     bool   `json:"if_save_api_data"`
	HttpProxyHost     string `json:"http_proxy_host"`
	HttpProxyPort     string `json:"http_proxy_port"`
	HttpProxyUsername string `json:"http_proxy_username"`
	HttpProxyPassword string `json:"http_proxy_password"`
}

func NewBaseV2Config

func NewBaseV2Config(appId, mchId, mchKey, notifyUrl, keyPath string) *WxPayConfig

func (*WxPayConfig) GetPayBaseUrl

func (c *WxPayConfig) GetPayBaseUrl() string

type WxPayOrderCloseRequest

type WxPayOrderCloseRequest struct {
	BaseWxPayRequest

	OutTradeNo string `json:"out_trade_no" xml:"out_trade_no"`
}

type WxPayOrderCloseResult

type WxPayOrderCloseResult struct {
	BaseWxPayResult
	// 业务结果描述
	ResultMsg string `json:"result_msg" xml:"result_msg"`
}

type WxPayOrderQueryRequest

type WxPayOrderQueryRequest struct {
	BaseWxPayRequest

	Version       string `json:"version" xml:"version"`
	TransactionId string `json:"transaction_id" xml:"transaction_id"`
	OutTradeNo    string `json:"out_trade_no" xml:"out_trade_no"`
}

type WxPayOrderQueryResult

type WxPayOrderQueryResult struct {
	BaseWxPayResult

	PromotionDetail    string    `json:"promotion_detail" xml:"promotion_detail"`
	DeviceInfo         string    `json:"device_info" xml:"device_info"`
	Openid             string    `json:"openid" xml:"openid"`
	IsSubscribe        string    `json:"is_subscribe" xml:"is_subscribe"`
	SubOpenid          string    `json:"sub_openid" xml:"sub_openid"`
	IsSubscribeSub     string    `json:"is_subscribe_sub" xml:"is_subscribe_sub"`
	TradeType          string    `json:"trade_type" xml:"trade_type"`
	TradeState         string    `json:"trade_state" xml:"trade_state"`
	BankType           string    `json:"bank_type" xml:"bank_type"`
	Detail             string    `json:"detail" xml:"detail"`
	TotalFee           int       `json:"total_fee" xml:"total_fee"`
	FeeType            string    `json:"fee_type" xml:"fee_type"`
	SettlementTotalFee int       `json:"settlement_total_fee" xml:"settlement_total_fee"`
	CashFee            int       `json:"cash_fee" xml:"cash_fee"`
	CashFeeType        string    `json:"cash_fee_type" xml:"cash_fee_type"`
	CouponFee          int       `json:"coupon_fee" xml:"coupon_fee"`
	CouponCount        int       `json:"coupon_count" xml:"coupon_count"`
	Coupons            []*Coupon `json:"coupons" xml:"coupons"`
	TransactionId      string    `json:"transaction_id" xml:"transaction_id"`
	OutTradeNo         string    `json:"out_trade_no" xml:"out_trade_no"`
	Attach             string    `json:"attach" xml:"attach"`
	TimeEnd            string    `json:"time_end" xml:"time_end"`
	TradeStateDesc     string    `json:"trade_state_desc" xml:"trade_state_desc"`
}

type WxPaySandboxSignKeyResult

type WxPaySandboxSignKeyResult struct {
	BaseWxPayResult
	SandboxSignkey string `json:"sandbox_signkey" xml:"sandbox_signkey"`
}

type WxPayService

type WxPayService interface {
	// 执行Post请求
	Post(url string, contentType string, data interface{}, args ...interface{}) ([]byte, error)
	// Post 执行Post请求并将结果转成对象
	PostFor(v interface{}, url string, contentType string, data interface{}, args ...interface{}) error
	// Post 携带证书执行Post请求
	PostKey(url string, data interface{}, certPath, keyPath string, args ...interface{}) ([]byte, error)
	// Post 携带证书执行Post请求并将结果转成对象
	PostKeyFor(v interface{}, url string, data interface{}, certPath, keyPath string, args ...interface{}) error

	// 获取微信支付请求url前缀,沙箱环境可能不一样.
	GetPayBaseUr() string

	// 统一支付
	// 调用统一下单接口,并组装生成支付所需参数对象.
	UnifyPay(*WxPayUnifiedOrderRequest) ([]byte, error)
	/** 统一下单
	  (详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1)
	  在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识"
	  接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder */
	UnifyOrder(*WxPayUnifiedOrderRequest) (*WxPayUnifiedOrderResult, error)

	/* 关闭订单.
	   应用场景
	   以下情况需要调用关单接口:
	   1. 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
	   2. 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
	   注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
	   接口地址:https://api.mch.weixin.qq.com/pay/closeorder
	   是否需要证书:   不需要。 */
	CloseOrderBy(string) (*WxPayOrderCloseResult, error)
	/* 关闭订单.
	   应用场景
	   以下情况需要调用关单接口:
	   1. 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
	   2. 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
	   注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
	   接口地址:https://api.mch.weixin.qq.com/pay/closeorder
	   是否需要证书:   不需要。 */
	CloseOrder(*WxPayOrderCloseRequest) (*WxPayOrderCloseResult, error)
	/* 查询订单(适合于需要自定义子商户号和子商户appid的情形).
	   详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
	   该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
	   需要调用查询接口的情况:
	   ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
	   ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
	   ◆ 调用被扫支付API,返回USERPAYING的状态;
	   ◆ 调用关单或撤销接口API之前,需确认支付状态; */
	QueryOrderBy(outTradeNo, transactionId string) (*WxPayOrderQueryResult, error)
	/* 查询订单(适合于需要自定义子商户号和子商户appid的情形).
	   详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
	   该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
	   需要调用查询接口的情况:
	   ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
	   ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
	   ◆ 调用被扫支付API,返回USERPAYING的状态;
	   ◆ 调用关单或撤销接口API之前,需确认支付状态; */
	QueryOrder(*WxPayOrderQueryRequest) (*WxPayOrderQueryResult, error)

	// 获取配置
	GetWxPayConfig() *WxPayConfig
	// 设置配置
	SetWxPayConfig(*WxPayConfig)

	// 获取提现接口
	GetEntPayService() WxEntPayService

	GetSandboxSignKey(*BaseWxPayRequest) (*WxPaySandboxSignKeyResult, error)
}

func NewWxPayService

func NewWxPayService(appId, mchId, mchKey, notifyUrl, keyPath string) WxPayService

func NewWxPayServiceFor

func NewWxPayServiceFor(config *WxPayConfig) WxPayService

type WxPayUnifiedOrderRequest

type WxPayUnifiedOrderRequest struct {
	XMLName xml.Name `xml:"xml" json:"-"`
	BaseWxPayRequest

	/* 总金额.
	   订单总金额,单位为分,详见支付金额 */
	TotalFee uint64 `json:"total_fee" xml:"total_fee"`
	/* 通知地址.
	   接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 */
	NotifyUrl string `json:"notify_url" xml:"notify_url"`
	/* 用户标识.
	   trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。
	   openid如何获取,可参考【获取openid】。
	   企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换 */
	Openid string `json:"openid" xml:"openid"`
	// 商品描述.
	Body string `json:"body" xml:"body"`
	/* 商户订单号.
	   商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 */
	OutTradeNo string `json:"out_trade_no" xml:"out_trade_no"`

	/* 附加数据.
	   附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 */
	Attach string `json:"attach,omitempty" xml:"attach,omitempty"`
	/* 终端IP.
	   APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 */
	SpbillCreateIp string `json:"spbill_create_ip,omitempty" xml:"spbill_create_ip,omitempty"`
	/* 接口版本号.
	   是否必填:单品优惠必填
	   类型:String(32) 示例值:1.0
	   描述:单品优惠新增字段,接口版本号,区分原接口,默认填写1.0。
	   入参新增version后,则支付通知接口也将返回单品优惠信息字段promotion_detail,请确保支付通知的签名验证能通过。
	   更多信息,详见文档:https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_102&index=2 */
	Version string `json:"version,omitempty" xml:"version,omitempty"`
	/* 设备号.
	   类型:String(32)
	   终端设备号(门店号或收银设备Id),注意:PC网页或公众号内支付请传"WEB" */
	DeviceInfo string `json:"device_info,omitempty" xml:"device_info,omitempty"`
	// 商品详情.
	Detail string `json:"detail,omitempty" xml:"detail,omitempty"`
	/* 货币类型.
	   符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 */
	FeeType string `json:"fee_type,omitempty" xml:"fee_type,omitempty"`
	/* 交易起始时间.
	   订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 */
	TimeStart string `json:"time_start,omitempty" xml:"time_start,omitempty"`
	/* 交易结束时间.
	   订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
	   注意:最短失效时间间隔必须大于5分钟 */
	TimeExpire string `json:"time_expire,omitempty" xml:"time_expire,omitempty"`
	GoodsTag   string `json:"goods_tag,omitempty" xml:"goods_tag,omitempty"`
	/* 交易类型.
	   取值如下:
	   JSAPI--公众号支付、
	   NATIVE --原生扫码支付、
	   APP--app支付,统一下单接口trade_type的传参可参考这里 */
	TradeType     TradeType `json:"trade_type" xml:"trade_type"`
	ProductId     string    `json:"product_id,omitempty" xml:"product_id,omitempty"`
	LimitPay      string    `json:"limit_pay,omitempty" xml:"limit_pay,omitempty"`
	SubOpenid     string    `json:"sub_openid,omitempty" xml:"sub_openid,omitempty"`
	Receipt       string    `json:"receipt,omitempty" xml:"receipt,omitempty"`
	SceneInfo     string    `json:"scene_info,omitempty" xml:"scene_info,omitempty"`
	Fingerprint   string    `json:"fingerprint,omitempty" xml:"fingerprint,omitempty"`
	ProfitSharing string    `json:"profit_sharing,omitempty" xml:"profit_sharing,omitempty"`
}

type WxPayUnifiedOrderResult

type WxPayUnifiedOrderResult struct {
	BaseWxPayResult
	// 微信生成的预支付回话标识,用于后续接口调用中使用,该值有效期为2小时
	PrepayId string `json:"prepay_id" xml:"prepay_id"`
	// 交易类型,取值为:JSAPI,NATIVE,APP等
	TradeType TradeType `json:"trade_type" xml:"trade_type"`
	// mweb_url 支付跳转链接
	MwebUrl string `json:"mweb_url" xml:"mweb_url"`
	// trade_type为NATIVE时有返回,用于生成二维码,展示给用户进行扫码支付
	CodeURL string `json:"code_url" xml:"code_url"`
}

type WxPayV2ServiceImpl

type WxPayV2ServiceImpl struct {
	// contains filtered or unexported fields
}

func (*WxPayV2ServiceImpl) CloseOrder

func (*WxPayV2ServiceImpl) CloseOrderBy

func (p *WxPayV2ServiceImpl) CloseOrderBy(outTradeNo string) (*WxPayOrderCloseResult, error)

func (*WxPayV2ServiceImpl) GetEntPayService

func (p *WxPayV2ServiceImpl) GetEntPayService() WxEntPayService

func (*WxPayV2ServiceImpl) GetPayBaseUr

func (p *WxPayV2ServiceImpl) GetPayBaseUr() string

func (*WxPayV2ServiceImpl) GetSandboxSignKey

func (p *WxPayV2ServiceImpl) GetSandboxSignKey(request *BaseWxPayRequest) (*WxPaySandboxSignKeyResult, error)

func (*WxPayV2ServiceImpl) GetWxPayConfig

func (p *WxPayV2ServiceImpl) GetWxPayConfig() *WxPayConfig

func (*WxPayV2ServiceImpl) Post

func (p *WxPayV2ServiceImpl) Post(url string, contentType string, data interface{}, args ...interface{}) ([]byte, error)

func (*WxPayV2ServiceImpl) PostFor

func (p *WxPayV2ServiceImpl) PostFor(v interface{}, url string, contentType string, data interface{}, args ...interface{}) error

func (*WxPayV2ServiceImpl) PostKey

func (p *WxPayV2ServiceImpl) PostKey(url string, data interface{}, certPath, keyPath string, args ...interface{}) ([]byte, error)

func (*WxPayV2ServiceImpl) PostKeyFor

func (p *WxPayV2ServiceImpl) PostKeyFor(v interface{}, url string, data interface{}, certPath, keyPath string, args ...interface{}) error

func (*WxPayV2ServiceImpl) QueryOrder

func (*WxPayV2ServiceImpl) QueryOrderBy

func (p *WxPayV2ServiceImpl) QueryOrderBy(outTradeNo, transactionId string) (*WxPayOrderQueryResult, error)

func (*WxPayV2ServiceImpl) SetWxPayConfig

func (p *WxPayV2ServiceImpl) SetWxPayConfig(config *WxPayConfig)

func (*WxPayV2ServiceImpl) UnifyOrder

func (*WxPayV2ServiceImpl) UnifyPay

func (p *WxPayV2ServiceImpl) UnifyPay(request *WxPayUnifiedOrderRequest) ([]byte, error)

Jump to

Keyboard shortcuts

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