wechat_pay

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Nov 17, 2020 License: MIT Imports: 28 Imported by: 0

README

wechat_pay

golang GitHub release pkg.go.dev MIT license

🔥 微信支付 Go(普通商户直连模式) 🚀🚀🚀

go get github.com/shenghui0779/wechat_pay

使用

import "github.com/shenghui0779/wechat_pay"
初始化商户实例
wxpay := wechat_pay.New(appid, mchid, apikey)

// 加载证书
if err := wxpay.LoadCertFromPemBlock(certBlock, keyBlock); err != nil {
    // 错误处理...
}

// wxpay.LoadCertFromPemFile(certFile, keyFile)
// wxpay.LoadCertFromP12File(path)
统一下单
  • 下单参数
// OrderData 统一下单数据
type OrderData struct {
	// 必填参数
	OutTradeNO     string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee       int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	TradeType      string // 取值如下:JSAPI,NATIVE,APP,MWEB,详细说明见参数规定
	Body           string // 商品或支付单简要描述
	NotifyURL      string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	// 选填参数
	DeviceInfo string // 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
	Detail     string // 商品名称明细列表
	Attach     string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType    string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TimeStart  string // 订单生成时间,格式为yyyyMMddHHmmss,如:2009年12月25日9点10分10秒 表示为:20091225091010
	TimeExpire string // 订单失效时间,格式为yyyyMMddHHmmss,如:2009年12月27日9点10分10秒 表示为:20091227091010
	GoodsTag   string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	ProductID  string // trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义
	LimitPay   string // no_credit--指定不能使用信用卡支付
	OpenID     string // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识
	Receipt    bool   // 是否在支付成功消息和支付详情页中出现开票入口,注:需要在微信支付商户平台或微信公众平台开通电子发票功能
	SceneInfo  string // 该字段用于上报支付的场景信息
}
  • 统一下单
r, err := wxpay.Do(UnifyOrder(orderData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
  • 拉起支付
prepayID := r["prepay_id"]

// APP支付
appapi := wxpay.APPAPI(prepayID, time.Now().Unix())

// JSAPI支付
jspai := wxpay.JSAPI(prepayID, time.Now().Unix())
订单查询
  • 根据微信订单号查询
r, err := wxpay.Do(QueryOrderByTransactionID(transactionID))
  • 根据商户订单号查询
r, err := wxpay.Do(QueryOrderByOutTradeNO(outTradeNO))
关闭订单
r, err := wxpay.Do(CloseOrder(outTradeNO))
申请退款
  • 退款参数
// RefundData 退款数据
type RefundData struct {
	// 必填参数
	OutRefundNO string // 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
	TotalFee    int    // 订单总金额,单位为分,只能为整数,详见支付金额
	RefundFee   int    // 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
	// 选填参数
	RefundFeeType string // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	RefundDesc    string // 若商户传入,会在下发给用户的退款消息中体现退款原因
	RefundAccount string // 退款资金来源,仅针对老资金流商户使用
	NotifyURL     string // 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数
}
  • 根据微信订单号退款
r, err := wxpay.Do(RefundByTransactionID(transactionID, refundData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
  • 根据商户订单号退款
r, err := wxpay.Do(RefundByOutTradeNO(outTradeNO, refundData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
查询退款
  • 根据微信退款单号查询
r, err := wxpay.Do(QueryRefundByRefundID(refundID))
  • 根据商户退款单号查询
r, err := wxpay.Do(QueryRefundByOutRefundNO(outRefundNO))
  • 根据微信订单号查询
r, err := wxpay.Do(QueryRefundByTransactionID(transactionID))
  • 根据商户订单号查询
r, err := wxpay.Do(QueryRefundByOutTradeNO(outTradeNO))
委托扣款
纯签约
  • 签约参数
// Contract 微信纯签约协议
type Contract struct {
	// 必填字段
	PlanID                 string // 协议模板id,设置路径见开发步骤
	ContractCode           string // 商户侧的签约协议号,由商户生成
	RequestSerial          int64  // 商户请求签约时的序列号,要求唯一性,纯数字, 范围不能超过Int64的范围
	ContractDisplayAccount string // 签约用户的名称,用于页面展示,参数值不支持UTF8非3字节编码的字符,如表情符号,故请勿使用微信昵称
	SpbillCreateIP         string // 用户客户端的真实IP地址,H5签约必填
	Timestamp              int64  // 系统当前时间戳,10位
	NotifyURL              string // 用于接收签约成功消息的回调通知地址,对notify_url参数值需进行encode处理,注意是对参数值进行encode
	// 选填字段
	ReturnAPP   bool   // APP签约选填,签约后是否返回app,注:签约参数appid必须为发起签约的app所有,且在微信开放平台注册过
	ReturnWeb   bool   // 公众号签约选填,签约后是否返回签约页面的referrer url, 不填或获取不到referrer则不返回; 跳转referrer url时会自动带上参数from_wxpay=1
	OuterID     int64  // 小程序签约选填,用户在商户侧的标识
	ReturnAPPID string // H5签约选填,商户具有指定返回app的权限时,签约成功将返回appid指定的app应用,如不填且签约发起时的浏览器UA可被微信识别,则跳转到浏览器,否则留在微信
}
  • APP纯签约
r, err := wxpay.Do(APPEntrust(contract))
  • 公众号纯签约
r := wxpay.Do(OAEntrust(contract))
  • 小程序纯签约,返回小程序所需的 extraData 数据
r := wxpay.Do(MPEntrust(contract))
  • H5纯签约
r := wxpay.Do(H5Entrust(contract))
支付中签约
  • 支付并签约参数
// ContractOrder 支付并签约
type ContractOrder struct {
	// 必填参数
	OutTradeNO             string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee               int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP         string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	TradeType              string // 取值如下:JSAPI,NATIVE,APP,MWEB,详细说明见参数规定
	Body                   string // 商品或支付单简要描述
	PlanID                 string // 协议模板id,设置路径见开发步骤
	ContractCode           string // 商户侧的签约协议号,由商户生成
	RequestSerial          int64  // 商户请求签约时的序列号,要求唯一性,纯数字, 范围不能超过Int64的范围
	ContractDisplayAccount string // 签约用户的名称,用于页面展示,参数值不支持UTF8非3字节编码的字符,如表情符号,故请勿使用微信昵称
	PaymentNotifyURL       string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	ContractNotifyURL      string // 签约信息回调通知的url
	// 选填参数
	DeviceInfo string // 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
	Detail     string // 商品名称明细列表
	Attach     string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType    string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TimeStart  string // 订单生成时间,格式为yyyyMMddHHmmss,如:2009年12月25日9点10分10秒 表示为:20091225091010
	TimeExpire string // 订单失效时间,格式为yyyyMMddHHmmss,如:2009年12月27日9点10分10秒 表示为:20091227091010
	GoodsTag   string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	ProductID  string // trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义
	LimitPay   string // no_credit--指定不能使用信用卡支付
	OpenID     string // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识
}
  • 下单
r, err := wxpay.Do(EntrustOrder(orderData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
签约查询
  • 根据微信返回的委托代扣协议id查询签约关系
r, err := wxpay.Do(QueryContractByID(contractID))
  • 根据签约协议号查询签约关系,需要商户平台配置的代扣模版id
r, err := wxpay.Do(QueryContractByCode(planID, contractCode))
申请扣款
  • 扣款参数
// PappayApplyData 扣款申请数据
type PappayApplyData struct {
	// 必填参数
	OutTradeNO     string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee       int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	ContractID     string // 签约成功后,微信返回的委托代扣协议id
	Body           string // 商品或支付单简要描述
	NotifyURL      string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	// 选填参数
	Detail   string // 商品名称明细列表
	Attach   string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType  string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	GoodsTag string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	Receipt  bool   // 是否在支付成功消息和支付详情页中出现开票入口,注:需要在微信支付商户平台或微信公众平台开通电子发票功能
}
  • 申请扣款
r, err := wxpay.Do(PappayApply(applyData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
扣款订单查询
  • 根据微信订单号查询
r, err := wxpay.Do(QueryPappayByTransactionID(transactionID))
  • 根据商户订单号查询
r, err := wxpay.Do(QueryPappayByOutTradeNO(outTradeNO))
解约
  • 根据微信返回的委托代扣协议id解约
r, err := wxpay.Do(DeleteContractByID(contractID, remark))
  • 根据签约协议号解约,需要商户平台配置的代扣模版id
r, err := wxpay.Do(DeleteContractByID(planID, contractCode, remark))
企业支付
付款到零钱
  • 付款参数
// TransferBalanceData 付款到零钱数据
type TransferBalanceData struct {
	// 必填参数
	PartnerTradeNO string // 商户订单号,需保持唯一性 (只能是字母或者数字,不能包含有其它字符)
	OpenID         string // 商户appid下,某用户的openid
	CheckName      string // NO_CHECK:不校验真实姓名;FORCE_CHECK:强校验真实姓名
	Amount         int    // 企业付款金额,单位:分
	Desc           string // 企业付款备注,必填。注意:备注中的敏感词会被转成字符*
	// 选填参数
	ReUserName     string // 收款用户真实姓名。如果check_name设置为FORCE_CHECK,则必填用户真实姓名
	DeviceInfo     string // 微信支付分配的终端设备号
	SpbillCreateIP string // 该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP
}
  • 付款
r, err := wxpay.Do(TransferToBalance(balanceData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
  • 付款单查询
r, err := wxpay.Do(QueryTransferBalanceOrder(partnerTradeNO))
付款到银行卡
  • 付款参数
// TransferBankCardData 付款到银行卡数据
type TransferBankCardData struct {
	// 必填参数
	PartnerTradeNO string // 商户订单号,需保持唯一(只允许数字[0~9]或字母[A~Z]和[a~z],最短8位,最长32位)
	EncBankNO      string // 收款方银行卡号(采用标准RSA算法,公钥由微信侧提供)
	EncTrueName    string // 收款方用户名(采用标准RSA算法,公钥由微信侧提供)
	BankCode       string // 银行卡所在开户行编号,参考:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4
	Amount         int    // 付款金额:RMB分(支付总额,不含手续费)注:大于0的整数
	// 选填参数
	Desc string // 企业付款到银行卡付款说明,即订单备注(UTF8编码,允许100个字符以内)
}
  • 付款
r, err := wxpay.Do(TransferToBankCard(bankCardData, pubKey))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
  • 付款单查询
r, err := wxpay.Do(QueryTransferBankCardOrder(partnerTradeNO))
企业红包
  • 红包参数
// RedpackData 红包发放数据
type RedpackData struct {
	// 必填参数
	MchBillNO   string // 商户订单号(每个订单号必须唯一。取值范围:0~9,a~z,A~Z)接口根据商户订单号支持重入,如出现超时可再调用
	SendName    string // 红包发送者名称;注意:敏感词会被转义成字符*
	ReOpenID    string // 接受红包的用户openid
	TotalAmount int    // 付款金额,单位:分
	TotalNum    int    // 红包发放总人数
	Wishing     string // 红包祝福语;注意:敏感词会被转义成字符*
	ClientIP    string // 调用接口的机器Ip地址
	ActName     string // 活动名称;注意:敏感词会被转义成字符*
	Remark      string // 备注信息
	// 选填参数
	AmtType   string // 红包金额设置方式,适用于裂变红包,ALL_RAND — 全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额
	NotifyWay string // 通过JSAPI方式领取红包,小程序红包固定传 MINI_PROGRAM_JSAPI
	SceneID   string // 发放红包使用场景,红包金额大于200或者小于1元时必传
	RiskInfo  string // 活动信息,urlencode(posttime=xx&mobile=xx&deviceid=xx。posttime:用户操作的时间戳;mobile:业务系统账号的手机号,国家代码-手机号,不需要+号;deviceid:MAC地址或者设备唯一标识;clientversion:用户操作的客户端版本
}
  • 发放普通红包
r, err := wxpay.Do(SendNormalRedpack(redpackData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 成功逻辑处理...
  • 发放裂变红包
r, err := wxpay.Do(SendGroupRedpack(redpackData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}
  • 发放小程序红包
r, err := wxpay.Do(SendMinipRedpack(redpackData))

if err != nil {
    // 错误处理...
}

if r["result_code"] != mch.ResultSuccess {
    // 失败处理...
}

// 领取红包
jsapi := wxpay.APPAPI(r["package"], time.Now().Unix())
  • 查询红包记录
r, err := wxpay.Do(QueryRedpackByBillNO(billNO))

Documentation

Overview

Package wechat_pay is a generated GoMock package.

Index

Constants

View Source
const (
	TradeAPP    = "APP"
	TradeJSAPI  = "JSAPI"
	TradeMWEB   = "MWEB"
	TradeNative = "NATIVE"
	TradePAP    = "PAP"
)

交易类型

View Source
const (
	SignMD5        = "MD5"
	SignHMacSHA256 = "HMAC-SHA256"
)

签名类型

View Source
const (
	ResultSuccess = "SUCCESS"
	ResultFail    = "FAIL"
	ResultNull    = "RESULT NULL" // 查询结果为空
	NotFound      = "NOT_FOUND"   // 数据不存在
	SystemError   = "SYSTEMERROR" // 系统繁忙,请稍后再试
)

返回结果

View Source
const (
	TradeStateSuccess = "SUCCESS"    // 支付成功
	TradeStateRefund  = "REFUND"     // 转入退款
	TradeStateNotpay  = "NOTPAY"     // 未支付
	TradeStateClosed  = "CLOSED"     // 已关闭
	TradeStateRevoked = "REVOKED"    // 已撤销(刷卡支付)
	TradeStatePaying  = "USERPAYING" // 用户支付中
	TradeStateAccept  = "ACCEPT"     // 已接收,等待扣款
	TradeStateError   = "PAYERROR"   // 支付失败
	TradeStatePayFail = "PAY_FAIL"   // 支付失败(其他原因,如银行返回失败)
)
View Source
const (
	CouponTypeCash   = "CASH"    // 充值代金券
	CouponTypeNoCash = "NO_CASH" // 非充值优惠券
)
View Source
const (
	RefundStatusSuccess    = "SUCCESS"     // 退款成功
	RefundStatusClosed     = "REFUNDCLOSE" // 退款关闭
	RefundStatusProcessing = "PROCESSING"  // 退款处理中
	RefundStatusChange     = "CHANGE"      // 退款异常
)
View Source
const (
	RefundChannelOriginal      = "ORIGINAL"       // 原路退款
	RefundChannelBalance       = "BALANCE"        // 退回到余额
	RefundChannelOtherBalance  = "OTHER_BALANCE"  // 原账户异常退到其他余额账户
	RefundChannelOtherBankCard = "OTHER_BANKCARD" // 原银行卡异常退到其他银行卡
)
View Source
const (
	OrderNotExist  = "ORDERNOTEXIST"  // 订单不存在
	RefundNotExist = "REFUNDNOTEXIST" // 退款不存在
)
View Source
const (
	ContractAdd    = "ADD"    // 签约
	ContractDelete = "DELETE" // 解约
)
View Source
const (
	ContractEntrustUndo       = "1" // 未签约
	ContractEntrustOK         = "0" // 已签约
	ContractEntrustProcessing = "9" // 签约进行中
)
View Source
const (
	ContractDeleteUndo     = "0" // 未解约
	ContractDeleteExpired  = "1" // 有效期过自动解约
	ContractDeleteUser     = "2" // 用户主动解约
	ContractDeleteAPI      = "3" // 商户API解约
	ContractDeletePlatform = "4" // 商户平台解约
	ContractDeleteLogout   = "5" // 注销
	ContractDeleteContact  = "7" // 用户联系客服发起的解约
)
View Source
const (
	TransferNoCheck    = "NO_CHECK"    // 不校验真实姓名
	TransferForceCheck = "FORCE_CHECK" // 强校验真实姓名
)
View Source
const (
	TransferStatusProcessing = "PROCESSING" // 处理中
	TransferStatusSuccess    = "SUCCESS"    // 转账成功
	TransferStatusFailed     = "FAILED"     // 转账失败
	TransferStatusBankFail   = "BANK_FAIL"  // 银行退票
)
View Source
const (
	RedpackScene1 = "PRODUCT_1" // 商品促销
	RedpackScene2 = "PRODUCT_2" // 抽奖
	RedpackScene3 = "PRODUCT_3" // 虚拟物品兑奖
	RedpackScene4 = "PRODUCT_4" // 企业内部福利
	RedpackScene5 = "PRODUCT_5" // 渠道分润
	RedpackScene6 = "PRODUCT_6" // 保险回馈
	RedpackScene7 = "PRODUCT_7" // 彩票派奖
	RedpackScene8 = "PRODUCT_8" // 税务刮奖
)
View Source
const (
	RedpackStatusSending   = "SENDING"   // 发放中
	RedpackStatusSent      = "SENT"      // 已发放待领取
	RedpackStatusFailed    = "FAILED"    // 发放失败
	RedpackStatusReceived  = "RECEIVED"  // 已领取
	RedpackStatusRefunding = "RFUND_ING" // 退款中
	RedpackStatusRefund    = "REFUND"    // 已退款
)
View Source
const (
	RedpackTypeNormal = "NORMAL" // 普通红包
	RedpackTypeGroup  = "GROUP"  // 裂变红包
)
View Source
const (
	RedpackSendTypeApi      = "API"      // 通过API接口发放
	RedpackSendTypeUpload   = "UPLOAD"   // 通过上传文件方式发放
	RedpackSendTypeActivity = "ACTIVITY" // 通过活动方式发放
)
View Source
const (
	OrderUnifyURL = "https://api.mch.weixin.qq.com/pay/unifiedorder" // 统一下单
	OrderQueryURL = "https://api.mch.weixin.qq.com/pay/orderquery"   // 订单查询
	OrderCloseURL = "https://api.mch.weixin.qq.com/pay/closeorder"   // 订单关闭
)

URL - order

View Source
const (
	RefundApplyURL = "https://api.mch.weixin.qq.com/secapi/pay/refund" // 申请退款
	RefundQueryURL = "https://api.mch.weixin.qq.com/pay/refundquery"   // 退款查询
)

URL - refund

View Source
const (
	PappayAPPEntrustURL     = "https://api.mch.weixin.qq.com/papay/preentrustweb"  // APP纯签约
	PappayOAEntrustURL      = "https://api.mch.weixin.qq.com/papay/entrustweb"     // 公众号纯签约
	PappayH5EntrustURL      = "https://api.mch.weixin.qq.com/papay/h5entrustweb"   // H5纯签约
	PappayContractOrderURL  = "https://api.mch.weixin.qq.com/pay/contractorder"    // 支付中签约
	PappayContractQueryURL  = "https://api.mch.weixin.qq.com/papay/querycontract"  // 签约查询
	PappayContractDeleteURL = "https://api.mch.weixin.qq.com/papay/deletecontract" // 申请解约
	PappayApplyURL          = "https://api.mch.weixin.qq.com/pay/pappayapply"      // 申请扣款
	PappayOrderQueryURL     = "https://api.mch.weixin.qq.com/pay/paporderquery"    // 扣款查询
)

URL - pappay

View Source
const (
	TransferToBalanceURL          = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers" // 企业付款到零钱
	TransferBalanceOrderQueryURL  = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo"     // 企业付款到零钱订单查询
	TransferToBankCardURL         = "https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank"                 // 企业付款到银行卡
	TransferBankCardOrderQueryURL = "https://api.mch.weixin.qq.com/mmpaysptrans/query_bank"               // 企业付款到银行卡订单查询
)

URL - transfer

View Source
const (
	RedpackNormalURL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"       // 普通红包
	RedpackGroupURL  = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack"  // 裂变红包
	RedpackMinipURL  = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendminiprogramhb" // 小程序红包
	RedpackQueryURL  = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo"         // 红包查询
)

URL - redpack

View Source
const RSAPublicKeyURL = "https://fraud.mch.weixin.qq.com/risk/getpublickey"

Variables

This section is empty.

Functions

func FormatMap2XML

func FormatMap2XML(m WXML) (string, error)

FormatMap2XML format map to xml

func RSADecrypt

func RSADecrypt(cipherText, privateKey []byte) ([]byte, error)

RSADecrypt rsa decryption with private key

func RSAEncrypt

func RSAEncrypt(data, publicKey []byte) ([]byte, error)

RSAEncrypt rsa encryption with public key

func SignWithHMacSHA256

func SignWithHMacSHA256(m WXML, apikey string, toUpper bool) string

SignWithHMacSHA256 生成HMAC-SHA256签名

func SignWithMD5

func SignWithMD5(m WXML, apikey string, toUpper bool) string

SignWithMD5 生成MD5签名

Types

type Action

type Action interface {
	WXML() func(appid, mchid, apikey, nonce string) (WXML, error)
	URL() string
	TLS() bool
}

Action wechat pay action

func APPEntrust

func APPEntrust(c *Contract) Action

APPEntrust APP纯签约

func CloseOrder

func CloseOrder(outTradeNO string) Action

CloseOrder 关闭订单【注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。】

func DeleteContractByCode

func DeleteContractByCode(planID, contractCode, remark string) Action

DeleteContractByCode 根据签约协议号解约,需要商户平台配置的代扣模版id

func DeleteContractByID

func DeleteContractByID(contractID, remark string) Action

DeleteContractByID 根据微信返回的委托代扣协议id解约

func EntrustByOrder

func EntrustByOrder(order *ContractOrder) Action

EntrustByOrder 支付中签约下单

func H5Entrust

func H5Entrust(c *Contract) Action

H5Entrust H5纯签约

func MPEntrust

func MPEntrust(c *Contract) Action

MPEntrust 小程序纯签约,返回小程序所需的 extraData 数据

func OAEntrust

func OAEntrust(c *Contract) Action

OAEntrust 公众号纯签约

func PappayApply

func PappayApply(data *PappayApplyData) Action

PappayApply 申请扣款

func QueryContractByCode

func QueryContractByCode(planID, contractCode string) Action

QueryContractByCode 根据签约协议号查询签约关系,需要商户平台配置的代扣模版id

func QueryContractByID

func QueryContractByID(contractID string) Action

QueryContractByID 根据微信返回的委托代扣协议id查询签约关系

func QueryOrderByOutTradeNO

func QueryOrderByOutTradeNO(outTradeNO string) Action

QueryOrderByOutTradeNO 根据商户订单号查询

func QueryOrderByTransactionID

func QueryOrderByTransactionID(transactionID string) Action

QueryOrderByTransactionID 根据微信订单号查询

func QueryPappayByOutTradeNO

func QueryPappayByOutTradeNO(outTradeNO string) Action

QueryPappayByOutTradeNO 根据商户订单号查询扣款信息

func QueryPappayByTransactionID

func QueryPappayByTransactionID(transactionID string) Action

QueryPappayByTransactionID 根据微信订单号查询扣款信息

func QueryRedpackByBillNO

func QueryRedpackByBillNO(billNO string) Action

QueryRedpackByBillNO 查询红包记录

func QueryRefundByOutRefundNO

func QueryRefundByOutRefundNO(outRefundNO string, offset ...int) Action

QueryRefundByOutRefundNO 根据商户退款单号查询退款信息

func QueryRefundByOutTradeNO

func QueryRefundByOutTradeNO(outTradeNO string, offset ...int) Action

QueryRefundByOutTradeNO 根据商户订单号查询退款信息

func QueryRefundByRefundID

func QueryRefundByRefundID(refundID string, offset ...int) Action

QueryRefundByRefundID 根据微信退款单号查询退款信息

func QueryRefundByTransactionID

func QueryRefundByTransactionID(transactionID string, offset ...int) Action

QueryRefundByTransactionID 根据微信订单号查询退款信息

func QueryTransferBalanceOrder

func QueryTransferBalanceOrder(partnerTradeNO string) Action

QueryTransferBalanceOrder 查询付款到零钱订单

func QueryTransferBankCardOrder

func QueryTransferBankCardOrder(partnerTradeNO string) Action

QueryTransferBankCardOrder 查询付款到银行卡订单

func RSAPublicKey

func RSAPublicKey() Action

RSAPublicKey 获取RSA加密公钥

func RefundByOutTradeNO

func RefundByOutTradeNO(outTradeNO string, data *RefundData) Action

RefundByOutTradeNO 根据商户订单号退款

func RefundByTransactionID

func RefundByTransactionID(transactionID string, data *RefundData) Action

RefundByTransactionID 根据微信订单号退款

func SendGroupRedpack

func SendGroupRedpack(data *RedpackData) Action

SendGroupRedpack 发放裂变红包

func SendMinipRedpack

func SendMinipRedpack(data *RedpackData) Action

SendMinipRedpack 发放小程序红包

func SendNormalRedpack

func SendNormalRedpack(data *RedpackData) Action

SendNormalRedpack 发放普通红包

func TransferToBalance

func TransferToBalance(data *TransferBalanceData) Action

TransferToBalance 付款到零钱【注意:当返回错误码为“SYSTEMERROR”时,请务必使用原商户订单号重试,否则可能造成重复支付等资金风险。】

func TransferToBankCard

func TransferToBankCard(data *TransferBankCardData, publicKey []byte) Action

TransferToBankCard 付款到银行卡【注意:当返回错误码为“SYSTEMERROR”时,请务必使用原商户订单号重试,否则可能造成重复支付等资金风险。】

func UnifyOrder

func UnifyOrder(data *OrderData) Action

UnifyOrder 统一下单

type CDATA

type CDATA string

CDATA XML CDATA section which is defined as blocks of text that are not parsed by the parser, but are otherwise recognized as markup.

func (CDATA) MarshalXML

func (c CDATA) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML encodes the receiver as zero or more XML elements.

type Contract

type Contract struct {
	// 必填字段
	PlanID                 string // 协议模板id,设置路径见开发步骤
	ContractCode           string // 商户侧的签约协议号,由商户生成
	RequestSerial          int64  // 商户请求签约时的序列号,要求唯一性,纯数字, 范围不能超过Int64的范围
	ContractDisplayAccount string // 签约用户的名称,用于页面展示,参数值不支持UTF8非3字节编码的字符,如表情符号,故请勿使用微信昵称
	SpbillCreateIP         string // 用户客户端的真实IP地址,H5签约必填
	Timestamp              int64  // 系统当前时间戳,10位
	NotifyURL              string // 用于接收签约成功消息的回调通知地址,对notify_url参数值需进行encode处理,注意是对参数值进行encode
	// 选填字段
	ReturnAPP   bool   // APP签约选填,签约后是否返回app,注:签约参数appid必须为发起签约的app所有,且在微信开放平台注册过
	ReturnWeb   bool   // 公众号签约选填,签约后是否返回签约页面的referrer url, 不填或获取不到referrer则不返回; 跳转referrer url时会自动带上参数from_wxpay=1
	OuterID     int64  // 小程序签约选填,用户在商户侧的标识
	ReturnAPPID string // H5签约选填,商户具有指定返回app的权限时,签约成功将返回appid指定的app应用,如不填且签约发起时的浏览器UA可被微信识别,则跳转到浏览器,否则留在微信
}

Contract 微信纯签约协议

type ContractOrder

type ContractOrder struct {
	// 必填参数
	OutTradeNO             string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee               int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP         string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	TradeType              string // 取值如下:JSAPI,NATIVE,APP,MWEB,详细说明见参数规定
	Body                   string // 商品或支付单简要描述
	PlanID                 string // 协议模板id,设置路径见开发步骤
	ContractCode           string // 商户侧的签约协议号,由商户生成
	RequestSerial          int64  // 商户请求签约时的序列号,要求唯一性,纯数字, 范围不能超过Int64的范围
	ContractDisplayAccount string // 签约用户的名称,用于页面展示,参数值不支持UTF8非3字节编码的字符,如表情符号,故请勿使用微信昵称
	PaymentNotifyURL       string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	ContractNotifyURL      string // 签约信息回调通知的url
	// 选填参数
	DeviceInfo string // 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
	Detail     string // 商品名称明细列表
	Attach     string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType    string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TimeStart  string // 订单生成时间,格式为yyyyMMddHHmmss,如:2009年12月25日9点10分10秒 表示为:20091225091010
	TimeExpire string // 订单失效时间,格式为yyyyMMddHHmmss,如:2009年12月27日9点10分10秒 表示为:20091227091010
	GoodsTag   string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	ProductID  string // trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义
	LimitPay   string // no_credit--指定不能使用信用卡支付
	OpenID     string // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识
}

ContractOrder 支付并签约

type HTTPClient

type HTTPClient interface {
	GetXML(reqURL string, body WXML, options ...HTTPOption) (WXML, error)
	PostXML(reqURL string, body WXML, options ...HTTPOption) (WXML, error)
}

func NewHTTPClient

func NewHTTPClient(tlsCfg ...*tls.Config) HTTPClient

NewHTTPClient returns a new http client

type HTTPOption

type HTTPOption interface {
	// contains filtered or unexported methods
}

HTTPOption configures how we set up the http request

func WithHTTPClose

func WithHTTPClose() HTTPOption

WithHTTPClose specifies close the connection after replying to this request (for servers) or after sending this request and reading its response (for clients).

func WithHTTPCookies

func WithHTTPCookies(cookies ...*http.Cookie) HTTPOption

WithHTTPCookies specifies the cookies to http request.

func WithHTTPHeader

func WithHTTPHeader(key, value string) HTTPOption

WithHTTPHeader specifies the headers to http request.

func WithHTTPTimeout

func WithHTTPTimeout(d time.Duration) HTTPOption

WithHTTPTimeout specifies the timeout to http request.

type MockHTTPClient

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

MockHTTPClient is a mock of HTTPClient interface

func NewMockHTTPClient

func NewMockHTTPClient(ctrl *gomock.Controller) *MockHTTPClient

NewMockHTTPClient creates a new mock instance

func (*MockHTTPClient) EXPECT

EXPECT returns an object that allows the caller to indicate expected use

func (*MockHTTPClient) GetXML

func (m *MockHTTPClient) GetXML(reqURL string, body WXML, options ...HTTPOption) (WXML, error)

GetXML mocks base method

func (*MockHTTPClient) PostXML

func (m *MockHTTPClient) PostXML(reqURL string, body WXML, options ...HTTPOption) (WXML, error)

PostXML mocks base method

type MockHTTPClientMockRecorder

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

MockHTTPClientMockRecorder is the mock recorder for MockHTTPClient

func (*MockHTTPClientMockRecorder) GetXML

func (mr *MockHTTPClientMockRecorder) GetXML(reqURL, body interface{}, options ...interface{}) *gomock.Call

GetXML indicates an expected call of GetXML

func (*MockHTTPClientMockRecorder) PostXML

func (mr *MockHTTPClientMockRecorder) PostXML(reqURL, body interface{}, options ...interface{}) *gomock.Call

PostXML indicates an expected call of PostXML

type MockHTTPOption

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

MockHTTPOption is a mock of HTTPOption interface

func NewMockHTTPOption

func NewMockHTTPOption(ctrl *gomock.Controller) *MockHTTPOption

NewMockHTTPOption creates a new mock instance

func (*MockHTTPOption) EXPECT

EXPECT returns an object that allows the caller to indicate expected use

type MockHTTPOptionMockRecorder

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

MockHTTPOptionMockRecorder is the mock recorder for MockHTTPOption

type OrderData

type OrderData struct {
	// 必填参数
	OutTradeNO     string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee       int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	TradeType      string // 取值如下:JSAPI,NATIVE,APP,MWEB,详细说明见参数规定
	Body           string // 商品或支付单简要描述
	NotifyURL      string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	// 选填参数
	DeviceInfo string // 终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
	Detail     string // 商品名称明细列表
	Attach     string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType    string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TimeStart  string // 订单生成时间,格式为yyyyMMddHHmmss,如:2009年12月25日9点10分10秒 表示为:20091225091010
	TimeExpire string // 订单失效时间,格式为yyyyMMddHHmmss,如:2009年12月27日9点10分10秒 表示为:20091227091010
	GoodsTag   string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	ProductID  string // trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义
	LimitPay   string // no_credit--指定不能使用信用卡支付
	OpenID     string // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识
	Receipt    bool   // 是否在支付成功消息和支付详情页中出现开票入口,注:需要在微信支付商户平台或微信公众平台开通电子发票功能
	SceneInfo  string // 该字段用于上报支付的场景信息
}

OrderData 统一下单数据

type PappayApplyData

type PappayApplyData struct {
	// 必填参数
	OutTradeNO     string // 商户系统内部的订单号,32个字符内、可包含字母,其他说明见商户订单号
	TotalFee       int    // 订单总金额,单位为分,详见支付金额
	SpbillCreateIP string // APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
	ContractID     string // 签约成功后,微信返回的委托代扣协议id
	Body           string // 商品或支付单简要描述
	NotifyURL      string // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数
	// 选填参数
	Detail   string // 商品名称明细列表
	Attach   string // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	FeeType  string // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	GoodsTag string // 商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	Receipt  bool   // 是否在支付成功消息和支付详情页中出现开票入口,注:需要在微信支付商户平台或微信公众平台开通电子发票功能
}

PappayApplyData 扣款申请数据

type RedpackData

type RedpackData struct {
	// 必填参数
	MchBillNO   string // 商户订单号(每个订单号必须唯一。取值范围:0~9,a~z,A~Z)接口根据商户订单号支持重入,如出现超时可再调用
	SendName    string // 红包发送者名称;注意:敏感词会被转义成字符*
	ReOpenID    string // 接受红包的用户openid
	TotalAmount int    // 付款金额,单位:分
	TotalNum    int    // 红包发放总人数
	Wishing     string // 红包祝福语;注意:敏感词会被转义成字符*
	ClientIP    string // 调用接口的机器Ip地址
	ActName     string // 活动名称;注意:敏感词会被转义成字符*
	Remark      string // 备注信息
	// 选填参数
	SceneID  string // 发放红包使用场景,红包金额大于200或者小于1元时必传
	RiskInfo string // 活动信息,urlencode(posttime=xx&mobile=xx&deviceid=xx。posttime:用户操作的时间戳;mobile:业务系统账号的手机号,国家代码-手机号,不需要+号;deviceid:MAC地址或者设备唯一标识;clientversion:用户操作的客户端版本
}

RedpackData 红包发放数据

type RefundData

type RefundData struct {
	// 必填参数
	OutRefundNO string // 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
	TotalFee    int    // 订单总金额,单位为分,只能为整数,详见支付金额
	RefundFee   int    // 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
	// 选填参数
	RefundFeeType string // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	RefundDesc    string // 若商户传入,会在下发给用户的退款消息中体现退款原因
	RefundAccount string // 退款资金来源,仅针对老资金流商户使用
	NotifyURL     string // 异步接收微信支付退款结果通知的回调地址,通知URL必须为外网可访问的url,不允许带参数
}

RefundData 退款数据

type Reply

type Reply struct {
	XMLName    xml.Name `xml:"xml"`
	ReturnCode CDATA    `xml:"return_code"`
	ReturnMsg  CDATA    `xml:"return_msg"`
}

Reply 回复支付结果

func ReplyFail

func ReplyFail(msg string) *Reply

ReplyFail 回复失败

func ReplyOK

func ReplyOK() *Reply

ReplyOK 回复成功

type TransferBalanceData

type TransferBalanceData struct {
	// 必填参数
	PartnerTradeNO string // 商户订单号,需保持唯一性 (只能是字母或者数字,不能包含有其它字符)
	OpenID         string // 商户appid下,某用户的openid
	CheckName      string // NO_CHECK:不校验真实姓名;FORCE_CHECK:强校验真实姓名
	Amount         int    // 企业付款金额,单位:分
	Desc           string // 企业付款备注,必填。注意:备注中的敏感词会被转成字符*
	// 选填参数
	ReUserName     string // 收款用户真实姓名。如果check_name设置为FORCE_CHECK,则必填用户真实姓名
	DeviceInfo     string // 微信支付分配的终端设备号
	SpbillCreateIP string // 该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP
}

TransferBalanceData 付款到零钱数据

type TransferBankCardData

type TransferBankCardData struct {
	// 必填参数
	PartnerTradeNO string // 商户订单号,需保持唯一(只允许数字[0~9]或字母[action~Z]和[a~z],最短8位,最长32位)
	EncBankNO      string // 收款方银行卡号(采用标准RSA算法,公钥由微信侧提供)
	EncTrueName    string // 收款方用户名(采用标准RSA算法,公钥由微信侧提供)
	BankCode       string // 银行卡所在开户行编号,参考:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4
	Amount         int    // 付款金额:RMB分(支付总额,不含手续费)注:大于0的整数
	// 选填参数
	Desc string // 企业付款到银行卡付款说明,即订单备注(UTF8编码,允许100个字符以内)
}

TransferBankCardData 付款到银行卡数据

type WXClient

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

func (*WXClient) GetXML

func (c *WXClient) GetXML(reqURL string, body WXML, options ...HTTPOption) (WXML, error)

GetXML http xml get request

func (*WXClient) PostXML

func (c *WXClient) PostXML(reqURL string, body WXML, options ...HTTPOption) (WXML, error)

PostXML http xml post request

type WXML

type WXML map[string]string

WXML deal with xml for wechat

func ParseXML2Map

func ParseXML2Map(b []byte) (WXML, error)

ParseXML2Map parse xml to map

type WechatAPI

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

WechatAPI 微信支付API

func (*WechatAPI) TLS

func (a *WechatAPI) TLS() bool

func (*WechatAPI) URL

func (a *WechatAPI) URL() string

func (*WechatAPI) WXML

func (a *WechatAPI) WXML() func(appid, mchid, apikey, nonce string) (WXML, error)

type WechatPay

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

WechatPay 微信支付

func New

func New(appid, mchid, apikey string) *WechatPay

New returns new wechat pay

func (*WechatPay) APPAPI

func (w *WechatPay) APPAPI(prepayID string, timestamp int64) WXML

APPAPI 用于APP拉起支付

func (*WechatPay) Do

func (w *WechatPay) Do(action Action, options ...HTTPOption) (WXML, error)

Do exec action

func (*WechatPay) JSAPI

func (w *WechatPay) JSAPI(prepayID string, timestamp int64) WXML

JSAPI 用于JS拉起支付

func (*WechatPay) LoadCertFromP12File

func (w *WechatPay) LoadCertFromP12File(path string) error

LoadCertFromP12File load cert from p12(pfx) file

func (*WechatPay) LoadCertFromPemBlock

func (w *WechatPay) LoadCertFromPemBlock(certPEMBlock, keyPEMBlock []byte) error

LoadCertFromPemBlock load cert from a pair of PEM encoded data

func (*WechatPay) LoadCertFromPemFile

func (w *WechatPay) LoadCertFromPemFile(certFile, keyFile string) error

LoadCertFromPemFile load cert from PEM file

func (*WechatPay) MPRedpackJSAPI

func (w *WechatPay) MPRedpackJSAPI(pkg string, timestamp int64) WXML

MPRedpackJSAPI 小程序领取红包

func (*WechatPay) VerifyWXReply

func (w *WechatPay) VerifyWXReply(m WXML) error

VerifyWXReply 验证微信结果

Jump to

Keyboard shortcuts

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