wechat

package module
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 6, 2019 License: MIT Imports: 21 Imported by: 0

README

wechat

Latest Tag

这是用Golang封装了微信支付的所有API接口的SDK,并自动生成和解析XML数据,还包括部分服务号、小程序、移动端的工具函数。

  • 支持境内普通商户和境内服务商(境外和银行服务商没有条件测试)。
  • 支持全局配置应用ID、商家ID等信息。
  • 全部参数和返回值均使用struct类型传递,而不是map类型。
  • 包含公众号网页授权码的相关操作。
  • 包含H5、小程序、移动端的支付签名生成方法。
安装
go get -u gitee.com/cuckoopark/wechat
初始化
const (
    isProd       = true                             // 生产环境或沙盒环境
    isMch        = false                            // 是否是企业模式,仅当调用企业付款时为true
    serviceType  = wechat.ServiceTypeNormalDomestic // 普通商户或服务商等类型
    apiKey       = "xxxxxxxx"                       // 微信支付上设置的API Key
    certFilepath = "/xxx/yyy/apiclient_cert.p12"    // 微信证书文件的本地路径,仅部分接口使用,如果不使用这些接口,可以传递空值
)
config := wechat.Config{
    AppId: AppID,
    MchId: MchID,
    SubAppId: SubAppId, // 仅服务商模式有效
    SubMchId: SubMchID, // 仅服务商模式有效
}
client := wechat.NewClient(isProd, isMch, serviceType, apiKey, certFilepath, config)
使用

下面是通用的接口,使用上面初始化时生成的实例client进行相应函数的调用:

  • 提交付款码支付:func (*Client) Micropay(MicropayBody) (MicropayResponse, error)
  • 统一下单:func (*Client) UnifiedOrder(UnifiedOrderBody) (UnifiedOrderResponse, error)
  • 查询订单:func (*Client) QueryOrder(QueryOrderBody) (QueryOrderResponse, error)
  • 关闭订单:func (*Client) CloseOrder(CloseOrderBody) (CloseOrderResponse, error)
  • 撤销订单:func (*Client) Reverse(ReverseBody) (ReverseResponse, error)
  • 申请退款:func (*Client) Refund(RefundBody) (RefundResponse, error)
  • 查询退款:func (*Client) QueryRefund(QueryRefundBody) (QueryRefundResponse, error)
  • 下载对账单:func (*Client) DownloadBill(DownloadBillBody) (string, *DownloadBillResponse, error)
  • 交易保障(JSAPI):func (*Client) ReportJsApi(ReportJsApiBody) (ReportJsApiResponse, error)
  • 交易保障(MICROPAY):func (*Client) ReportMicropay(ReportMicropayBody) (ReportMicropayResponse, error)
  • 下载资金账单:TODO,client.DownloadFundFlow()
  • 拉取订单评价数据:TODO,client.BatchQueryComment()
  • 企业付款到零钱:func (*Client) Change(ChangeBody) (ChangeResponse, error)
  • 授权码查询OpenId:func (*Client) OpenIdByAuthCode(OpenIdByAuthCodeBody) (OpenIdByAuthCodeResponse, error)
  • 获取AccessToken:func GetAccessToken(appId string, appSecret string) (AccessToken, error)
  • 获取用户基本信息(UnionId机制):func GetUserInfo(accessToken string, openId string, lang ...string) (UserInfo, error)
  • 获取小程序支付签名:func GetMiniPaySign(appId, nonceStr, prepayId, signType, timeStamp, apiKey string) (string)
  • 获取H5支付签名:func GetH5PaySign(appId, nonceStr, packages, signType, timeStamp, apiKey string) (string)
  • 获取APP支付签名:func GetAppPaySign(appId, nonceStr, partnerId, prepayId, signType, timeStamp, apiKey string) (string)

其中带有(*Client)字样的接口,需要使用wechat.NewClient创建的实例对象来调用,而不带的接口,则可以直接使用wechat.XXX调用。

使用样例:

func Test() {
	// 初始化参数
	body := wechat.QueryOrderBody{}
	body.OutTradeNo = "YgENQFTovdeJdFouNyy3nFVOhGD6ZvPH"
	// 请求订单查询
	wxRsp, err := client.QueryOrder(body)
	if err != nil {
		return
	}
	fmt.Printf("返回值: %+v\n", wxRsp)
}

注意事项:

  • 参数或返回值的类型,请查看接口对应的wx_xxxxxx.go文件,里面有XXXBodyXXXResponse与之对应。
  • 参数或返回值中的常量,请参照constant.go文件。
  • 具体使用方法,请参照接口对应的wx_xxxxxx_test.go测试文件。
文档
开发进度
测试方法

修改client_test.go中的生成测试Client的代码,调整沙盒/生产环境、普通商户/服务商等选项,或者修改环境变量,来调整商户参数。

环境变量的脚本在env文件中,修改后加载环境变量:

source env
go test
TODO
  • 测试改为不同情境使用不同的用例。
  • 继续调试境内普通商户和境内服务商的其他模块API文档。
  • 选择性调试境外接口。

Documentation

Index

Constants

View Source
const (

	// 服务模式
	ServiceTypeNormalDomestic      = 1 // 境内普通商户
	ServiceTypeNormalAbroad        = 2 // 境外普通商户
	ServiceTypeFacilitatorDomestic = 3 // 境内服务商
	ServiceTypeFacilitatorAbroad   = 4 // 境外服务商
	ServiceTypeBankServiceProvidor = 5 // 银行服务商

	// 支付类型
	TradeTypeApplet   = "JSAPI"    // 小程序支付
	TradeTypeJsApi    = "JSAPI"    // JSAPI支付
	TradeTypeApp      = "APP"      // APP支付
	TradeTypeH5       = "MWEB"     // H5支付
	TradeTypeNative   = "NATIVE"   // Native支付
	TradeTypeMicropay = "MICROPAY" // 付款码支付

	// 交易状态
	TradeStateSuccess    = "SUCCESS"    // 支付成功
	TradeStateRefund     = "REFUND"     // 转入退款
	TradeStateNotPay     = "NOTPAY"     // 未支付
	TradeStateClosed     = "CLOSED"     // 已关闭
	TradeStateRevoked    = "REVOKED"    // 已撤销(刷卡支付)
	TradeStateUserPaying = "USERPAYING" // 用户支付中
	TradeStatePayError   = "PAYERROR"   // 支付失败(其他原因,如银行返回失败)

	// 交易保障(MICROPAY)上报数据包的交易状态
	ReportMicropayTradeStateOk     = "OK"     // 成功
	ReportMicropayTradeStateFail   = "FAIL"   // 失败
	ReportMicropayTradeStateCancel = "CANCLE" // 取消

	// 签名方式
	SignTypeMD5        = "MD5" // 默认
	SignTypeHmacSHA256 = "HMAC-SHA256"

	// 货币类型
	FeeTypeCNY = "CNY" // 人民币

	// 指定支付方式
	LimitPayNoCredit = "no_credit" // 指定不能使用信用卡支付

	// 压缩账单
	TarTypeGzip = "GZIP"

	// 电子发票
	ReceiptEnable = "Y" // 支付成功消息和支付详情页将出现开票入口

	// 代金券类型
	CouponTypeCash   = "CASH"    // 充值代金券
	CouponTypeNoCash = "NO_CASH" // 非充值优惠券

	// 账单类型
	BillTypeAll            = "ALL"             // 返回当日所有订单信息,默认值
	BillTypeSuccess        = "SUCCESS"         // 返回当日成功支付的订单
	BillTypeRefund         = "REFUND"          // 返回当日退款订单
	BillTypeRechargeRefund = "RECHARGE_REFUND" // 返回当日充值退款订单

	// 退款渠道
	RefundChannelOriginal      = "ORIGINAL"       // 原路退款
	RefundChannelBalance       = "BALANCE"        // 退回到余额
	RefundChannelOtherBalance  = "OTHER_BALANCE"  // 原账户异常退到其他余额账户
	RefundChannelOtherBankCard = "OTHER_BANKCARD" // 原银行卡异常退到其他银行卡

	// 退款状态
	RefundStatusSuccess    = "SUCCESS"     // 退款成功
	RefundStatusClose      = "REFUNDCLOSE" // 退款关闭
	RefundStatusProcessing = "PROCESSING"  // 退款处理中
	RefundStatusChange     = "CHANGE"      // 退款异常,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,可前往商户平台(pay.weixin.qq.com)-交易中心,手动处理此笔退款

	// 退款资金来源
	RefundAccountRechargeFunds  = "REFUND_SOURCE_RECHARGE_FUNDS"  // 可用余额退款/基本账户
	RefundAccountUnsettledFunds = "REFUND_SOURCE_UNSETTLED_FUNDS" // 未结算资金退款

	// 退款发起来源
	RefundRequestSourceApi            = "API"             // API接口
	RefundRequestSourceVendorPlatform = "VENDOR_PLATFORM" // 商户平台

	// 找零校验用户姓名选项
	CheckNameTypeNoCheck    = "NO_CHECK"    //不校验真实姓名
	CheckNameTypeForceCheck = "FORCE_CHECK" //强校验真实姓名

	// 返回结果
	ResponseSuccess = "SUCCESS" // 成功,通信标识或业务结果
	ResponseFail    = "FAIL"    // 失败,通信标识或业务结果

	// 返回消息
	ResponseMessageOk = "OK" // 返回成功信息

	// 错误代码,包括描述、支付状态、原因、解决方案
	ErrCodeAppIdMchIdNotMatch   = "APPID_MCHID_NOT_MATCH" // appid和mch_id不匹配 支付确认失败 appid和mch_id不匹配 请确认appid和mch_id是否匹配
	ErrCodeAppIdNotExist        = "APPID_NOT_EXIST"       // APPID不存在 支付确认失败 参数中缺少APPID 请检查APPID是否正确
	ErrCodeAuthCodeError        = "AUTH_CODE_ERROR"       // 授权码参数错误 支付确认失败 请求参数未按指引进行填写 每个二维码仅限使用一次,请刷新再试
	ErrCodeAuthCodeExpire       = "AUTHCODEEXPIRE"        // 二维码已过期,请用户在微信上刷新后再试 支付确认失败 用户的条码已经过期 请收银员提示用户,请用户在微信上刷新条码,然后请收银员重新扫码。 直接将错误展示给收银员
	ErrCodeAuthCodeInvalid      = "AUTH_CODE_INVALID"     // 授权码检验错误 支付确认失败 收银员扫描的不是微信支付的条码 请扫描微信支付被扫条码/二维码
	ErrCodeBankError            = "BANKERROR"             // 银行系统异常 支付结果未知 银行端超时 请立即调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。
	ErrCodeBuyerMismatch        = "BUYER_MISMATCH"        // 支付帐号错误 支付确认失败 暂不支持同一笔订单更换支付方 请确认支付方是否相同
	ErrCodeInvalidRequest       = "INVALID_REQUEST"       // 无效请求 支付确认失败 商户系统异常导致,商户权限异常、重复请求支付、证书错误、频率限制等 请确认商户系统是否正常,是否具有相应支付权限,确认证书是否正确,控制频率
	ErrCodeInvalidTransactionId = "INVALID_TRANSACTIONID" // 无效transaction_id 请求参数未按指引进行填写 请求参数错误,检查原交易号是否存在或发起支付交易接口返回失败
	ErrCodeLackParams           = "LACK_PARAMS"           // 缺少参数 支付确认失败 缺少必要的请求参数 请检查参数是否齐全
	ErrCodeMchIdNotExist        = "MCHID_NOT_EXIST"       // MCHID不存在 支付确认失败 参数中缺少MCHID 请检查MCHID是否正确
	ErrCodeNoAuth               = "NOAUTH"                // 商户无权限 支付确认失败 商户没有开通被扫支付权限 请开通商户号权限。请联系产品或商务申请
	ErrCodeNotEnough            = "NOTENOUGH"             // 余额不足 支付确认失败 用户的零钱余额不足 请收银员提示用户更换当前支付的卡,然后请收银员重新扫码。建议:商户系统返回给收银台的提示为“用户余额不足.提示用户换卡支付”
	ErrCodeNotSuportCard        = "NOTSUPORTCARD"         // 不支持卡类型 支付确认失败 用户使用卡种不支持当前支付形式 请用户重新选择卡种 建议:商户系统返回给收银台的提示为“该卡不支持当前支付,提示用户换卡支付或绑新卡支付”
	ErrCodeNotUtf8              = "NOT_UTF8"              // 编码格式错误 支付确认失败 未使用指定编码格式 请使用UTF-8编码格式
	ErrCodeOrderClosed          = "ORDERCLOSED"           // 订单已关闭 支付确认失败 该订单已关 商户订单号异常,请重新下单支付
	ErrCodeOrderPaid            = "ORDERPAID"             // 订单已支付 支付确认失败 订单号重复 请确认该订单号是否重复支付,如果是新单,请使用新订单号提交
	ErrCodeOrderReversed        = "ORDERREVERSED"         // 订单已撤销 支付确认失败 当前订单已经被撤销 当前订单状态为“订单已撤销”,请提示用户重新支付
	ErrCodeOutTradeNoUsed       = "OUT_TRADE_NO_USED"     // 商户订单号重复 支付确认失败 同一笔交易不能多次提交 请核实商户订单号是否重复提交
	ErrCodeParamError           = "PARAM_ERROR"           // 参数错误 支付确认失败 请求参数未按指引进行填写 请根据接口返回的详细信息检查您的程序
	ErrCodePostDataEmpty        = "POST_DATA_EMPTY"       // post数据为空 post数据不能为空 请检查post数据是否为空
	ErrCodeRefundNotExist       = "REFUNDNOTEXIST"        // 退款订单查询失败 订单号错误或订单状态不正确 请检查订单号是否有误以及订单状态是否正确,如:未支付、已支付未退款
	ErrCodeRequirePostMethod    = "REQUIRE_POST_METHOD"   // 请使用post方法 支付确认失败 未使用post传递参数 请检查请求参数是否通过post方法提交
	ErrCodeSignError            = "SIGNERROR"             // 签名错误 支付确认失败 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求
	ErrCodeSystemError          = "SYSTEMERROR"           // 接口返回错误 支付结果未知 系统超时 请立即调用被扫订单结果查询API,查询当前订单状态,并根据订单的状态决定下一步的操作。
	ErrCodeTradeError           = "TRADE_ERROR"           // 交易错误 支付确认失败 业务错误导致交易失败、用户账号异常、风控、规则限制等 请确认帐号是否存在异常
	ErrCodeUserPaying           = "USERPAYING"            // 用户支付中,需要输入密码 支付结果未知 该笔交易因为业务规则要求,需要用户输入支付密码。 等待5秒,然后调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。
	ErrCodeXmlFormatError       = "XML_FORMAT_ERROR"      // XML格式错误 支付确认失败 XML格式错误 请检查XML参数格式是否正确

	// 是否关注公众账号
	IsSubscribeYes = "Y" // 关注
	IsSubscribeNo  = "N" // 未关注

	// 银行类型
	BankTypeIcbcDebit    = "ICBC_DEBIT"    // 工商银行(借记卡)
	BankTypeIcbcCredit   = "ICBC_CREDIT"   // 工商银行(信用卡)
	BankTypeAbcDebit     = "ABC_DEBIT"     // 农业银行(借记卡)
	BankTypeAbcCredit    = "ABC_CREDIT"    // 农业银行(信用卡)
	BankTypePsbcDebit    = "PSBC_DEBIT"    // 邮政储蓄银行(借记卡)
	BankTypePsbcCredit   = "PSBC_CREDIT"   // 邮政储蓄银行(信用卡)
	BankTypeCcbDebit     = "CCB_DEBIT"     // 建设银行(借记卡)
	BankTypeCcbCredit    = "CCB_CREDIT"    // 建设银行(信用卡)
	BankTypeCmbDebit     = "CMB_DEBIT"     // 招商银行(借记卡)
	BankTypeCmbCredit    = "CMB_CREDIT"    // 招商银行(信用卡)
	BankTypeBocDebit     = "BOC_DEBIT"     // 中国银行(借记卡)
	BankTypeBocCredit    = "BOC_CREDIT"    // 中国银行(信用卡)
	BankTypeCommDebit    = "COMM_DEBIT"    // 交通银行(借记卡)
	BankTypeCommCredit   = "COMM_CREDIT"   // 交通银行(信用卡)
	BankTypeSpdbDebit    = "SPDB_DEBIT"    // 浦发银行(借记卡)
	BankTypeSpdbCredit   = "SPDB_CREDIT"   // 浦发银行(信用卡)
	BankTypeGdbDebit     = "GDB_DEBIT"     // 广发银行(借记卡)
	BankTypeGdbCredit    = "GDB_CREDIT"    // 广发银行(信用卡)
	BankTypeCmbcDebit    = "CMBC_DEBIT"    // 民生银行(借记卡)
	BankTypeCmbcCredit   = "CMBC_CREDIT"   // 民生银行(信用卡)
	BankTypePabDebit     = "PAB_DEBIT"     // 平安银行(借记卡)
	BankTypePabCredit    = "PAB_CREDIT"    // 平安银行(信用卡)
	BankTypeCebDebit     = "CEB_DEBIT"     // 光大银行(借记卡)
	BankTypeCebCredit    = "CEB_CREDIT"    // 光大银行(信用卡)
	BankTypeCibDebit     = "CIB_DEBIT"     // 兴业银行(借记卡)
	BankTypeCibCredit    = "CIB_CREDIT"    // 兴业银行(信用卡)
	BankTypeCiticDebit   = "CITIC_DEBIT"   // 中信银行(借记卡)
	BankTypeCiticCredit  = "CITIC_CREDIT"  // 中信银行(信用卡)
	BankTypeBoshDebit    = "BOSH_DEBIT"    // 上海银行(借记卡)
	BankTypeBoshCredit   = "BOSH_CREDIT"   // 上海银行(信用卡)
	BankTypeCrbDebit     = "CRB_DEBIT"     // 华润银行(借记卡)
	BankTypeHzbDebit     = "HZB_DEBIT"     // 杭州银行(借记卡)
	BankTypeHzbCredit    = "HZB_CREDIT"    // 杭州银行(信用卡)
	BankTypeBsbDebit     = "BSB_DEBIT"     // 包商银行(借记卡)
	BankTypeBsbCredit    = "BSB_CREDIT"    // 包商银行(信用卡)
	BankTypeCqbDebit     = "CQB_DEBIT"     // 重庆银行(借记卡)
	BankTypeSdebDebit    = "SDEB_DEBIT"    // 顺德农商行(借记卡)
	BankTypeSzrcbDebit   = "SZRCB_DEBIT"   // 深圳农商银行(借记卡)
	BankTypeSzrcbCredit  = "SZRCB_CREDIT"  // 深圳农商银行(信用卡)
	BankTypeHrbbDebit    = "HRBB_DEBIT"    // 哈尔滨银行(借记卡)
	BankTypeBocdDebit    = "BOCD_DEBIT"    // 成都银行(借记卡)
	BankTypeGdnybDebit   = "GDNYB_DEBIT"   // 南粤银行(借记卡)
	BankTypeGdnybCredit  = "GDNYB_CREDIT"  // 南粤银行(信用卡)
	BankTypeGzcbDebit    = "GZCB_DEBIT"    // 广州银行(借记卡)
	BankTypeGzcbCredit   = "GZCB_CREDIT"   // 广州银行(信用卡)
	BankTypeJsbDebit     = "JSB_DEBIT"     // 江苏银行(借记卡)
	BankTypeJsbCredit    = "JSB_CREDIT"    // 江苏银行(信用卡)
	BankTypeNbcbDebit    = "NBCB_DEBIT"    // 宁波银行(借记卡)
	BankTypeNbcbCredit   = "NBCB_CREDIT"   // 宁波银行(信用卡)
	BankTypeNjcbDebit    = "NJCB_DEBIT"    // 南京银行(借记卡)
	BankTypeQhnxDebit    = "QHNX_DEBIT"    // 青海农信(借记卡)
	BankTypeOrdosbCredit = "ORDOSB_CREDIT" // 鄂尔多斯银行(信用卡)
	BankTypeOrdosbDebit  = "ORDOSB_DEBIT"  // 鄂尔多斯银行(借记卡)
	BankTypeBjrcbCredit  = "BJRCB_CREDIT"  // 北京农商(信用卡)
	BankTypeBhbDebit     = "BHB_DEBIT"     // 河北银行(借记卡)
	BankTypeBgzbDebit    = "BGZB_DEBIT"    // 贵州银行(借记卡)
	BankTypeBeebDebit    = "BEEB_DEBIT"    // 鄞州银行(借记卡)
	BankTypePzhccbDebit  = "PZHCCB_DEBIT"  // 攀枝花银行(借记卡)
	BankTypeQdccbCredit  = "QDCCB_CREDIT"  // 青岛银行(信用卡)
	BankTypeQdccbDebit   = "QDCCB_DEBIT"   // 青岛银行(借记卡)
	BankTypeShinhanDebit = "SHINHAN_DEBIT" // 新韩银行(借记卡)
	BankTypeQlbDebit     = "QLB_DEBIT"     // 齐鲁银行(借记卡)
	BankTypeQsbDebit     = "QSB_DEBIT"     // 齐商银行(借记卡)
	BankTypeZzbDebit     = "ZZB_DEBIT"     // 郑州银行(借记卡)
	BankTypeCcabDebit    = "CCAB_DEBIT"    // 长安银行(借记卡)
	BankTypeRzbDebit     = "RZB_DEBIT"     // 日照银行(借记卡)
	BankTypeScnxDebit    = "SCNX_DEBIT"    // 四川农信(借记卡)
	BankTypeBeebCredit   = "BEEB_CREDIT"   // 鄞州银行(信用卡)
	BankTypeSdrcuDebit   = "SDRCU_DEBIT"   // 山东农信(借记卡)
	BankTypeBczDebit     = "BCZ_DEBIT"     // 沧州银行(借记卡)
	BankTypeSjbDebit     = "SJB_DEBIT"     // 盛京银行(借记卡)
	BankTypeLnnxDebit    = "LNNX_DEBIT"    // 辽宁农信(借记卡)
	// BankType                 = "JUFENGB_DEBIT"     // 临朐聚丰村镇银行(借记卡)
	// BankType                 = "ZZB_CREDIT"        // 郑州银行(信用卡)
	// BankType                 = "JXNXB_DEBIT"       // 江西农信(借记卡)
	// BankType                 = "JZB_DEBIT"         // 晋中银行(借记卡)
	// BankType                 = "JZCB_CREDIT"       // 锦州银行(信用卡)
	// BankType                 = "JZCB_DEBIT"        // 锦州银行(借记卡)
	// BankType                 = "KLB_DEBIT"         // 昆仑银行(借记卡)
	// BankType                 = "KRCB_DEBIT"        // 昆山农商(借记卡)
	// BankType                 = "KUERLECB_DEBIT"    // 库尔勒市商业银行(借记卡)
	// BankType                 = "LJB_DEBIT"         // 龙江银行(借记卡)
	// BankType                 = "NYCCB_DEBIT"       // 南阳村镇银行(借记卡)
	// BankType                 = "LSCCB_DEBIT"       // 乐山市商业银行(借记卡)
	// BankType                 = "LUZB_DEBIT"        // 柳州银行(借记卡)
	// BankType                 = "LWB_DEBIT"         // 莱商银行(借记卡)
	// BankType                 = "LYYHB_DEBIT"       // 辽阳银行(借记卡)
	// BankType                 = "LZB_DEBIT"         // 兰州银行(借记卡)
	// BankType                 = "MINTAIB_CREDIT"    // 民泰银行(信用卡)
	// BankType                 = "MINTAIB_DEBIT"     // 民泰银行(借记卡)
	// BankType                 = "NCB_DEBIT"         // 宁波通商银行(借记卡)
	// BankType                 = "NMGNX_DEBIT"       // 内蒙古农信(借记卡)
	// BankType                 = "XAB_DEBIT"         // 西安银行(借记卡)
	// BankType                 = "WFB_CREDIT"        // 潍坊银行(信用卡)
	// BankType                 = "WFB_DEBIT"         // 潍坊银行(借记卡)
	// BankType                 = "WHB_CREDIT"        // 威海商业银行(信用卡)
	// BankType                 = "WHB_DEBIT"         // 威海市商业银行(借记卡)
	// BankType                 = "WHRC_CREDIT"       // 武汉农商(信用卡)
	// BankType                 = "WHRC_DEBIT"        // 武汉农商行(借记卡)
	// BankType                 = "WJRCB_DEBIT"       // 吴江农商行(借记卡)
	// BankType                 = "WLMQB_DEBIT"       // 乌鲁木齐银行(借记卡)
	// BankType                 = "WRCB_DEBIT"        // 无锡农商(借记卡)
	// BankType                 = "WZB_DEBIT"         // 温州银行(借记卡)
	// BankType                 = "XAB_CREDIT"        // 西安银行(信用卡)
	// BankType                 = "WEB_DEBIT"         // 微众银行(借记卡)
	// BankType                 = "XIB_DEBIT"         // 厦门国际银行(借记卡)
	// BankType                 = "XJRCCB_DEBIT"      // 新疆农信银行(借记卡)
	// BankType                 = "XMCCB_DEBIT"       // 厦门银行(借记卡)
	// BankType                 = "YNRCCB_DEBIT"      // 云南农信(借记卡)
	// BankType                 = "YRRCB_CREDIT"      // 黄河农商银行(信用卡)
	// BankType                 = "YRRCB_DEBIT"       // 黄河农商银行(借记卡)
	// BankType                 = "YTB_DEBIT"         // 烟台银行(借记卡)
	// BankType                 = "ZJB_DEBIT"         // 紫金农商银行(借记卡)
	// BankType                 = "ZJLXRB_DEBIT"      // 兰溪越商银行(借记卡)
	// BankType                 = "ZJRCUB_CREDIT"     // 浙江农信(信用卡)
	// BankType                 = "AHRCUB_DEBIT"      // 安徽省农村信用社联合社(借记卡)
	// BankType                 = "BCZ_CREDIT"        // 沧州银行(信用卡)
	// BankType                 = "SRB_DEBIT"         // 上饶银行(借记卡)
	// BankType                 = "ZYB_DEBIT"         // 中原银行(借记卡)
	// BankType                 = "ZRCB_DEBIT"        // 张家港农商行(借记卡)
	// BankType                 = "SRCB_CREDIT"       // 上海农商银行(信用卡)
	// BankType                 = "SRCB_DEBIT"        // 上海农商银行(借记卡)
	// BankType                 = "ZJTLCB_DEBIT"      // 浙江泰隆银行(借记卡)
	// BankType                 = "SUZB_DEBIT"        // 苏州银行(借记卡)
	// BankType                 = "SXNX_DEBIT"        // 山西农信(借记卡)
	// BankType                 = "SXXH_DEBIT"        // 陕西信合(借记卡)
	// BankType                 = "ZJRCUB_DEBIT"      // 浙江农信(借记卡)
	// BankType                 = "AE_CREDIT"         // AE(信用卡)
	// BankType                 = "TACCB_CREDIT"      // 泰安银行(信用卡)
	// BankType                 = "TACCB_DEBIT"       // 泰安银行(借记卡)
	// BankType                 = "TCRCB_DEBIT"       // 太仓农商行(借记卡)
	// BankType                 = "TJBHB_CREDIT"      // 天津滨海农商行(信用卡)
	// BankType                 = "TJBHB_DEBIT"       // 天津滨海农商行(借记卡)
	// BankType                 = "TJB_DEBIT"         // 天津银行(借记卡)
	// BankType                 = "TRCB_DEBIT"        // 天津农商(借记卡)
	// BankType                 = "TZB_DEBIT"         // 台州银行(借记卡)
	// BankType                 = "URB_DEBIT"         // 联合村镇银行(借记卡)
	// BankType                 = "DYB_CREDIT"        // 东营银行(信用卡)
	// BankType                 = "CSRCB_DEBIT"       // 常熟农商银行(借记卡)
	// BankType                 = "CZB_CREDIT"        // 浙商银行(信用卡)
	// BankType                 = "CZB_DEBIT"         // 浙商银行(借记卡)
	// BankType                 = "CZCB_CREDIT"       // 稠州银行(信用卡)
	// BankType                 = "CZCB_DEBIT"        // 稠州银行(借记卡)
	// BankType                 = "DANDONGB_CREDIT"   // 丹东银行(信用卡)
	// BankType                 = "DANDONGB_DEBIT"    // 丹东银行(借记卡)
	// BankType                 = "DLB_CREDIT"        // 大连银行(信用卡)
	// BankType                 = "DLB_DEBIT"         // 大连银行(借记卡)
	// BankType                 = "DRCB_CREDIT"       // 东莞农商银行(信用卡)
	// BankType                 = "DRCB_DEBIT"        // 东莞农商银行(借记卡)
	// BankType                 = "CSRCB_CREDIT"      // 常熟农商银行(信用卡)
	// BankType                 = "DYB_DEBIT"         // 东营银行(借记卡)
	// BankType                 = "DYCCB_DEBIT"       // 德阳银行(借记卡)
	// BankType                 = "FBB_DEBIT"         // 富邦华一银行(借记卡)
	// BankType                 = "FDB_DEBIT"         // 富滇银行(借记卡)
	// BankType                 = "FJHXB_CREDIT"      // 福建海峡银行(信用卡)
	// BankType                 = "FJHXB_DEBIT"       // 福建海峡银行(借记卡)
	// BankType                 = "FJNX_DEBIT"        // 福建农信银行(借记卡)
	// BankType                 = "FUXINB_DEBIT"      // 阜新银行(借记卡)
	// BankType                 = "BOCDB_DEBIT"       // 承德银行(借记卡)
	// BankType                 = "JSNX_DEBIT"        // 江苏农商行(借记卡)
	// BankType                 = "BOLFB_DEBIT"       // 廊坊银行(借记卡)
	// BankType                 = "CCAB_CREDIT"       // 长安银行(信用卡)
	// BankType                 = "CBHB_DEBIT"        // 渤海银行(借记卡)
	// BankType                 = "CDRCB_DEBIT"       // 成都农商银行(借记卡)
	// BankType                 = "BYK_DEBIT"         // 营口银行(借记卡)
	// BankType                 = "BOZ_DEBIT"         // 张家口市商业银行(借记卡)
	// BankType                 = "CFT"               // 零钱
	// BankType                 = "BOTSB_DEBIT"       // 唐山银行(借记卡)
	// BankType                 = "BOSZS_DEBIT"       // 石嘴山银行(借记卡)
	// BankType                 = "BOSXB_DEBIT"       // 绍兴银行(借记卡)
	// BankType                 = "BONX_DEBIT"        // 宁夏银行(借记卡)
	// BankType                 = "BONX_CREDIT"       // 宁夏银行(信用卡)
	// BankType                 = "GDHX_DEBIT"        // 广东华兴银行(借记卡)
	// BankType                 = "BOLB_DEBIT"        // 洛阳银行(借记卡)
	// BankType                 = "BOJX_DEBIT"        // 嘉兴银行(借记卡)
	// BankType                 = "BOIMCB_DEBIT"      // 内蒙古银行(借记卡)
	// BankType                 = "BOHN_DEBIT"        // 海南银行(借记卡)
	// BankType                 = "BOD_DEBIT"         // 东莞银行(借记卡)
	// BankType                 = "CQRCB_CREDIT"      // 重庆农商银行(信用卡)
	// BankType                 = "CQRCB_DEBIT"       // 重庆农商银行(借记卡)
	// BankType                 = "CQTGB_DEBIT"       // 重庆三峡银行(借记卡)
	// BankType                 = "BOD_CREDIT"        // 东莞银行(信用卡)
	// BankType                 = "CSCB_DEBIT"        // 长沙银行(借记卡)
	// BankType                 = "BOB_CREDIT"        // 北京银行(信用卡)
	// BankType                 = "GDRCU_DEBIT"       // 广东农信银行(借记卡)
	// BankType                 = "BOB_DEBIT"         // 北京银行(借记卡)
	// BankType                 = "HRXJB_DEBIT"       // 华融湘江银行(借记卡)
	// BankType                 = "HSBC_DEBIT"        // 恒生银行(借记卡)
	// BankType                 = "HSB_CREDIT"        // 徽商银行(信用卡)
	// BankType                 = "HSB_DEBIT"         // 徽商银行(借记卡)
	// BankType                 = "HUNNX_DEBIT"       // 湖南农信(借记卡)
	// BankType                 = "HUSRB_DEBIT"       // 湖商村镇银行(借记卡)
	// BankType                 = "HXB_CREDIT"        // 华夏银行(信用卡)
	// BankType                 = "HXB_DEBIT"         // 华夏银行(借记卡)
	// BankType                 = "HNNX_DEBIT"        // 河南农信(借记卡)
	// BankType                 = "BNC_DEBIT"         // 江西银行(借记卡)
	// BankType                 = "BNC_CREDIT"        // 江西银行(信用卡)
	// BankType                 = "BJRCB_DEBIT"       // 北京农商行(借记卡)
	// BankType                 = "JCB_DEBIT"         // 晋城银行(借记卡)
	// BankType                 = "JJCCB_DEBIT"       // 九江银行(借记卡)
	// BankType                 = "JLB_DEBIT"         // 吉林银行(借记卡)
	// BankType                 = "JLNX_DEBIT"        // 吉林农信(借记卡)
	// BankType                 = "JNRCB_DEBIT"       // 江南农商(借记卡)
	// BankType                 = "JRCB_DEBIT"        // 江阴农商行(借记卡)
	// BankType                 = "JSHB_DEBIT"        // 晋商银行(借记卡)
	// BankType                 = "HAINNX_DEBIT"      // 海南农信(借记卡)
	// BankType                 = "GLB_DEBIT"         // 桂林银行(借记卡)
	// BankType                 = "GRCB_CREDIT"       // 广州农商银行(信用卡)
	// BankType                 = "GRCB_DEBIT"        // 广州农商银行(借记卡)
	// BankType                 = "GSB_DEBIT"         // 甘肃银行(借记卡)
	// BankType                 = "GSNX_DEBIT"        // 甘肃农信(借记卡)
	// BankType                 = "GXNX_DEBIT"        // 广西农信(借记卡)
	BankTypeGycbCredit       = "GYCB_CREDIT"       // 贵阳银行(信用卡)
	BankTypeGycbDebit        = "GYCB_DEBIT"        // 贵阳银行(借记卡)
	BankTypeGznxDebit        = "GZNX_DEBIT"        // 贵州农信(借记卡)
	BankTypeHainnxCredit     = "HAINNX_CREDIT"     // 海南农信(信用卡)
	BankTypeHkbDebit         = "HKB_DEBIT"         // 汉口银行(借记卡)
	BankTypeHanabDebit       = "HANAB_DEBIT"       // 韩亚银行(借记卡)
	BankTypeHbcbCredit       = "HBCB_CREDIT"       // 湖北银行(信用卡)
	BankTypeHbcbDebit        = "HBCB_DEBIT"        // 湖北银行(借记卡)
	BankTypeHbnxCredit       = "HBNX_CREDIT"       // 湖北农信(信用卡)
	BankTypeHbnxDebit        = "HBNX_DEBIT"        // 湖北农信(借记卡)
	BankTypeHdcbDebit        = "HDCB_DEBIT"        // 邯郸银行(借记卡)
	BankTypeHebnxDebit       = "HEBNX_DEBIT"       // 河北农信(借记卡)
	BankTypeHfbDebit         = "HFB_DEBIT"         // 恒丰银行(借记卡)
	BankTypeHkbeaDebit       = "HKBEA_DEBIT"       // 东亚银行(借记卡)
	BankTypeJcbCredit        = "JCB_CREDIT"        // JCB(信用卡)
	BankTypeMasterCardCredit = "MASTERCARD_CREDIT" // MASTERCARD(信用卡)
	BankTypeVisaCredit       = "VISA_CREDIT"       // VISA(信用卡)
	BankTypeLqt              = "LQT"               // 零钱通
)

Variables

This section is empty.

Functions

func EscapedPath

func EscapedPath(u string) (path string, err error)

对URL进行Encode编码

func FormatDateTime

func FormatDateTime(t time.Time) string

格式化时间,按照yyyyMMddHHmmss格式

func GenerateXml

func GenerateXml(data map[string]interface{}) string

生成请求XML的Body体

func GetAppPaySign

func GetAppPaySign(appId, nonceStr, partnerId, prepayId, signType, timeStamp, apiKey string) (paySign string)

APP支付,统一下单获取支付参数后,再次计算APP支付所需要的的sign

func GetH5PaySign

func GetH5PaySign(appId, nonceStr, packages, signType, timeStamp, apiKey string) (paySign string)

JSAPI支付,统一下单获取支付参数后,再次计算出微信内H5支付需要用的paySign

func GetMiniPaySign

func GetMiniPaySign(appId, nonceStr, prepayId, signType, timeStamp, apiKey string) (paySign string)

JSAPI支付,统一下单获取支付参数后,再次计算出小程序用的paySign

func GetRandomString

func GetRandomString(length int) string

获取随机字符串

func JsonString

func JsonString(m interface{}) string

生成模型字符串

func PKCS7UnPadding

func PKCS7UnPadding(plainText []byte) []byte

解密填充模式(去除补全码) PKCS7UnPadding 解密时,需要在最后面去掉加密时添加的填充byte

Types

type AccessToken

type AccessToken struct {
	AccessToken  string `json:"access_token"`  // 获取到的凭证
	ExpiresIn    int64  `json:"expires_in"`    // SessionKey超时时间(秒)
	RefreshToken string `json:"refresh_token"` // 用户刷新access_tokenOpenId
	OpenId       string `json:"openid"`        // 用户唯一标识
	Scope        string `json:"scope"`         // 用户授权的作用域
	ErrCode      int    `json:"errcode"`       // 错误码
	ErrMsg       string `json:"errmsg"`        // 错误信息
}

func GetAuthAccessToken

func GetAuthAccessToken(appId, appSecret, code string) (accessToken AccessToken, err error)

获取网页授权的access_token

func GetBasicAccessToken

func GetBasicAccessToken(appId, appSecret string) (accessToken AccessToken, err error)

获取基础支持的access_token

func RefreshAuthAccessToken

func RefreshAuthAccessToken(appId, refreshToken string) (accessToken AccessToken, err error)

刷新网页授权的access_token

type BodyMap

type BodyMap map[string]interface{}

type ChangeBody

type ChangeBody struct {
	DeviceInfo     string `json:"device_info,omitempty"`  // 终端设备号
	PartnerTradeNo string `json:"partner_trade_no"`       // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
	OpenId         string `json:"openid"`                 // 商品或支付单简要描述,格式要求:门店品牌名-城市分店名-实际商品名称
	CheckName      string `json:"check_name"`             // 校验用户姓名选项(见constant定义)
	ReUserName     string `json:"re_user_name,omitempty"` // 收款用户姓名
	Amount         int    `json:"amount"`                 // 企业找零金额,单位为分
	Desc           string `json:"desc"`                   // 企业付款备注
	SpbillCreateIP string `json:"spbill_create_ip"`       // IP可传用户端或者服务端的IP
}

微信找零的参数

type ChangeResponse

type ChangeResponse struct {
	ResponseModel
	MchServiceResponseModel
	DeviceInfo     string `json:"device_info,omitempty"` // 终端设备号
	PartnerTradeNo string `json:"partner_trade_no"`      // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
	PaymentNo      string `json:"payment_no"`            // 企业付款成功,返回的微信付款单号
	PaymentTime    string `json:"payment_time"`          // 企业付款成功时间
}

微信找零的返回值

type Client

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

func NewClient

func NewClient(isProd bool, isMch bool, serviceType int, apiKey string, certFilepath string, config Config) (client *Client)

初始化微信客户端

func (*Client) Change

func (c *Client) Change(body ChangeBody) (wxRsp ChangeResponse, err error)

企业付款到零钱(前提用户必须关注公众号)

func (*Client) CloseOrder

func (c *Client) CloseOrder(body CloseOrderBody) (wxRsp CloseOrderResponse, err error)

关闭订单

func (*Client) DownloadBill

func (c *Client) DownloadBill(body DownloadBillBody) (wxRsp string, failRsp *DownloadBillResponse, err error)

下载对账单

func (*Client) Micropay

func (c *Client) Micropay(body MicropayBody) (wxRsp MicropayResponse, err error)

提交付款码支付

func (*Client) OnPayNotify

func (c *Client) OnPayNotify(handler PayNotifyHandler, requestBody []byte) (rspBody string, err error)

支付结果通知

func (*Client) OpenIdByAuthCode

func (c *Client) OpenIdByAuthCode(body OpenIdByAuthCodeBody) (wxRsp OpenIdByAuthCodeResponse, err error)

授权码查询openid

func (*Client) QueryOrder

func (c *Client) QueryOrder(body QueryOrderBody) (wxRsp QueryOrderResponse, err error)

查询订单

func (*Client) QueryRefund

func (c *Client) QueryRefund(body QueryRefundBody) (wxRsp QueryRefundResponse, err error)

查询退款

func (*Client) Refund

func (c *Client) Refund(body RefundBody) (wxRsp RefundResponse, err error)

申请退款

func (*Client) RefundNotify

func (c *Client) RefundNotify(handler RefundNotifyHandler, requestBody []byte) (rspBody string, err error)

退款结果通知

func (*Client) ReportJsApi

func (c *Client) ReportJsApi(body ReportJsApiBody) (wxRsp ReportJsApiResponse, err error)

交易保障(JSAPI)

func (*Client) ReportMicropay

func (c *Client) ReportMicropay(body ReportMicropayBody) (wxRsp ReportMicropayResponse, err error)

交易保障(MICROPAY)

func (*Client) Reverse

func (c *Client) Reverse(body ReverseBody) (wxRsp ReverseResponse, err error)

撤销订单

func (*Client) UnifiedOrder

func (c *Client) UnifiedOrder(body UnifiedOrderBody) (wxRsp UnifiedOrderResponse, err error)

统一下单

type CloseOrderBody

type CloseOrderBody struct {
	SignType   string `json:"sign_type,omitempty"` // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	OutTradeNo string `json:"out_trade_no"`        // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
}

关闭订单的参数

type CloseOrderResponse

type CloseOrderResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	ResultMsg string `xml:"result_msg"` // 对业务结果的补充说明
}

关闭订单的返回值

type Config

type Config struct {
	AppId    string // 微信分配的公众账号ID
	SubAppId string // 微信分配的子商户公众账号ID
	MchId    string // 微信支付分配的商户号
	SubMchId string // 微信支付分配的子商户号,开发者模式下必填
}

微信支付的整体配置

type CouponResponseModel

type CouponResponseModel struct {
	CouponId   string // 代金券或立减优惠ID
	CouponType string // CASH-充值代金券 NO_CASH-非充值优惠券 开通免充值券功能,并且订单使用了优惠券后有返回
	CouponFee  int64  // 单个代金券或立减优惠支付金额
}

返回结果中的优惠券条目信息

func NewCouponResponseModel

func NewCouponResponseModel(
	doc *etree.Element,
	idFormat string,
	typeFormat string,
	feeFormat string,
	numbers ...interface{},
) (m CouponResponseModel)

在XML节点树中,查找labels对应的

type DownloadBillBody

type DownloadBillBody struct {
	SignType string `json:"sign_type,omitempty"` // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	BillDate string `json:"bill_date"`           // 下载对账单的日期,格式:20140603
	BillType string `json:"bill_type,omitempty"` // ALL,返回当日所有订单信息,默认值 SUCCESS,返回当日成功支付的订单 REFUND,返回当日退款订单 RECHARGE_REFUND,返回当日充值退款订单
	TarType  string `json:"tar_type,omitempty"`  // 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
}

下载对账单的参数

type DownloadBillResponse

type DownloadBillResponse struct {
	ResponseModel
	ErrCode string `xml:"err_code"` // 失败错误码,详见错误码列表 TODO
}

下载对账单的返回值

type MchServiceResponseModel

type MchServiceResponseModel struct {
	MchAppId   string `xml:"mch_appid"`    // 子商户公众账号ID
	MchId      string `xml:"mchid"`        // 子商户号
	NonceStr   string `xml:"nonce_str"`    // 随机字符串,不长于32位
	Sign       string `xml:"sign"`         // 签名,详见签名生成算法
	ResultCode string `xml:"result_code"`  // SUCCESS/FAIL
	ErrCode    string `xml:"err_code"`     // 详细参见第6节错误列表
	ErrCodeDes string `xml:"err_code_des"` // 错误返回的信息描述
}

特殊商户接口业务返回结果的错误信息

type MicropayBody

type MicropayBody struct {
	SignType       string `json:"sign_type,omitempty"`   // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	DeviceInfo     string `json:"device_info,omitempty"` // 终端设备号(商户自定义,如门店编号)
	Body           string `json:"body"`                  // 商品或支付单简要描述,格式要求:门店品牌名-城市分店名-实际商品名称
	Detail         string `json:"detail,omitempty"`      // 单品优惠功能字段,需要接入请见详细说明
	Attach         string `json:"attach,omitempty"`      // 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	OutTradeNo     string `json:"out_trade_no"`          // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
	TotalFee       int    `json:"total_fee"`             // 订单总金额,单位为分,只能为整数,详见支付金额
	FeeType        string `json:"fee_type,omitempty"`    // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	SpbillCreateIP string `json:"spbill_create_ip"`      // 支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP
	GoodsTag       string `json:"goods_tag,omitempty"`   // 订单优惠标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	LimitPay       string `json:"limit_pay,omitempty"`   // no_credit:指定不能使用信用卡支付
	TimeStart      string `json:"time_start,omitempty"`  // 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
	TimeExpire     string `json:"time_expire,omitempty"` // 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。注意:最短失效时间间隔需大于1分钟
	AuthCode       string `json:"auth_code"`             // 扫码支付授权码,设备读取用户微信中的条码或者二维码信息 (注:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头)
	Receipt        string `json:"receipt,omitempty"`     // Y,传入Y时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效
	SceneInfoStr   string `json:"scene_info,omitempty"`  // 该字段用于上报场景信息,目前支持上报实际门店信息。该字段为JSON对象数据,对象格式为{"store_info":{"id": "门店ID","name": "名称","area_code": "编码","address": "地址" }} ,字段详细说明请点击行前的+展开
	// 用于生成SceneInfoStr
	SceneInfo *SceneInfoModel `json:"-"`
}

提交付款码支付的参数

type MicropayResponse

type MicropayResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	DeviceInfo string `xml:"device_info"` // 调用接口提交的终端设备号
	// 当return_code和result_code都为SUCCESS时
	OpenId             string `xml:"openid"`               // 用户在商户appid下的唯一标识
	IsSubscribe        string `xml:"is_subscribe"`         // 用户是否关注公众账号,仅在公众账号类型支付有效,取值范围:Y或N;Y-关注;N-未关注
	SubOpenId          string `xml:"sub_openid"`           // (服务商模式) 子商户appid下用户唯一标识,如需返回则请求时需要传sub_appid
	SubIsSubscribe     string `xml:"sub_is_subscribe"`     // (服务商模式) 用户是否关注子公众账号,仅在公众账号类型支付有效,取值范围:Y或N;Y-关注;N-未关注
	TradeType          string `xml:"trade_type"`           // 支付类型为MICROPAY(即扫码支付)
	BankType           string `xml:"bank_type"`            // 银行类型,采用字符串类型的银行标识,值列表详见银行类型
	FeeType            string `xml:"fee_type"`             // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TotalFee           int    `xml:"total_fee"`            // 订单总金额,单位为分,只能为整数,详见支付金额
	CashFeeType        string `xml:"cash_fee_type"`        // 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	CashFee            int    `xml:"cash_fee"`             // 订单现金支付金额,详见支付金额
	SettlementTotalFee int    `xml:"settlement_total_fee"` // 当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。
	CouponFee          int    `xml:"coupon_fee"`           // "代金券"金额<=订单金额,订单金额-"代金券"金额=现金支付金额,详见支付金额
	TransactionId      string `xml:"transaction_id"`       // 微信支付订单号
	OutTradeNo         string `xml:"out_trade_no"`         // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。
	Attach             string `xml:"attach"`               // 商家数据包,原样返回
	TimeEnd            string `xml:"time_end"`             // 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则
	PromotionDetail    string `xml:"promotion_detail"`     // TODO 单品优惠详情
}

提交付款码支付的返回值

type NotifyResponseModel

type NotifyResponseModel struct {
	ReturnCode string // SUCCESS/FAIL
	ReturnMsg  string // 返回信息,如非空,为错误原因,或OK
}

微信通知的结果返回值

func (*NotifyResponseModel) ToXmlString

func (m *NotifyResponseModel) ToXmlString() string

type OpenIdByAuthCodeBody

type OpenIdByAuthCodeBody struct {
	SignType string `json:"sign_type,omitempty"` // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	AuthCode string `json:"auth_code"`           // 扫码支付授权码,设备读取用户微信中的条码或者二维码信息
}

授权码查询openid参数

type OpenIdByAuthCodeResponse

type OpenIdByAuthCodeResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	// 当return_code 和result_code都为SUCCESS时
	OpenId    string `xml:"openid"`     // 用户在商户appid下的唯一标识
	SubOpenId string `xml:"sub_openid"` // 用户在子商户appid下的唯一标识
}

授权码查询openid返回值

type PayNotifyBody

type PayNotifyBody struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	DeviceInfo         string `xml:"device_info"`          // 微信支付分配的终端设备号
	IsSubscribe        string `xml:"is_subscribe"`         // 用户是否关注公众账号(机构商户不返回)
	SubIsSubscribe     string `xml:"sub_is_subscribe"`     // (服务商模式) 用户是否关注子公众账号(机构商户不返回)
	OpenId             string `xml:"openid"`               // 用户在商户appid下的唯一标识
	SubOpenId          string `xml:"sub_openid"`           // (服务商模式) 用户在子商户appid下的唯一标识
	TradeType          string `xml:"trade_type"`           // 交易类型
	BankType           string `xml:"bank_type"`            // 银行类型,采用字符串类型的银行标识,银行类型见附表
	TotalFee           int    `xml:"total_fee"`            // 订单总金额,单位为分
	FeeType            string `xml:"fee_type"`             // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	CashFee            int    `xml:"cash_fee"`             // 现金支付金额订单现金支付金额,详见支付金额
	CashFeeType        string `xml:"cash_fee_type"`        // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	SettlementTotalFee int    `xml:"settlement_total_fee"` // 应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。
	CouponFee          int    `xml:"coupon_fee"`           // 代金券或立减优惠金额<=订单总金额,订单总金额-代金券或立减优惠金额=现金支付金额,详见支付金额
	CouponCount        int    `xml:"coupon_count"`         // 代金券或立减优惠使用数量
	TransactionId      string `xml:"transaction_id"`       // 微信支付订单号
	OutTradeNo         string `xml:"out_trade_no"`         // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
	Attach             string `xml:"attach"`               // 商家数据包,原样返回
	TimeEnd            string `xml:"time_end"`             // 支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
	// 使用coupon_count的序号生成的优惠券项
	Coupons []CouponResponseModel `xml:"-"`
}

支付结果通知的参数

type PayNotifyHandler

type PayNotifyHandler func(PayNotifyBody) error

type QueryOrderBody

type QueryOrderBody struct {
	SignType      string `json:"sign_type,omitempty"`      // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	TransactionId string `json:"transaction_id,omitempty"` // (非必填,二选一) 微信的订单号,优先使用
	OutTradeNo    string `json:"out_trade_no,omitempty"`   // (非必填,二选一) 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
}

查询订单的参数

type QueryOrderResponse

type QueryOrderResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	// 当return_code、result_code、trade_state都为SUCCESS时有返回,如trade_state不为SUCCESS,则只返回out_trade_no(必传)和attach(选传)。
	DeviceInfo         string `xml:"device_info"`          // 微信支付分配的终端设备号
	OpenId             string `xml:"openid"`               // 用户在商户appid下的唯一标识
	IsSubscribe        string `xml:"is_subscribe"`         // 用户是否关注公众账号,Y-关注,N-未关注(机构商户不返回)
	SubOpenId          string `xml:"sub_openid"`           // (服务商模式) 子商户appid下用户唯一标识,如需返回则请求时需要传sub_appid
	SubIsSubscribe     string `xml:"sub_is_subscribe"`     // (服务商模式) 用户是否关注子公众账号,仅在公众账号类型支付有效,取值范围:Y或N;Y-关注;N-未关注
	TradeType          string `xml:"trade_type"`           // 调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,MICROPAY,详细说明见参数规定
	TradeState         string `xml:"trade_state"`          // SUCCESS—支付成功 REFUND—转入退款 NOTPAY—未支付 CLOSED—已关闭 REVOKED—已撤销(刷卡支付) USERPAYING--用户支付中 PAYERROR--支付失败(其他原因,如银行返回失败)
	BankType           string `xml:"bank_type"`            // 银行类型,采用字符串类型的银行标识
	Detail             string `xml:"detail"`               // 商品详细列表,使用Json格式,传输签名前请务必使用CDATA标签将JSON文本串保护起来。如果使用了单品优惠,会有单品优惠信息返回
	TotalFee           int    `xml:"total_fee"`            // 订单总金额,单位为分
	FeeType            string `xml:"fee_type"`             // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	SettlementTotalFee int    `xml:"settlement_total_fee"` // 当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。
	CashFee            int    `xml:"cash_fee"`             // 现金支付金额订单现金支付金额,详见支付金额
	CashFeeType        string `xml:"cash_fee_type"`        // 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	CouponFee          int    `xml:"coupon_fee"`           // "代金券或立减优惠"金额<=订单总金额,订单总金额-"代金券或立减优惠"金额=现金支付金额,详见支付金额
	CouponCount        int    `xml:"coupon_count"`         // 代金券或立减优惠使用数量
	TransactionId      string `xml:"transaction_id"`       // 微信支付订单号
	OutTradeNo         string `xml:"out_trade_no"`         // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
	Attach             string `xml:"attach"`               // 商家数据包,原样返回
	TimeEnd            string `xml:"time_end"`             // 订单支付时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
	TradeStateDesc     string `xml:"trade_state_desc"`     // 对当前查询订单状态的描述和下一步操作的指引
	// 使用coupon_count的序号生成的优惠券项
	Coupons []CouponResponseModel `xml:"-"`
}

查询订单的返回值

type QueryRefundBody

type QueryRefundBody struct {
	SignType      string `json:"sign_type,omitempty"`      // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	TransactionId string `json:"transaction_id,omitempty"` // (非必填,四选一) 微信订单号 查询的优先级是: refund_id > out_refund_no > transaction_id > out_trade_no
	OutTradeNo    string `json:"out_trade_no,omitempty"`   // (非必填,四选一) 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
	OutRefundNo   string `json:"out_refund_no,omitempty"`  // (非必填,四选一) 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
	RefundId      string `json:"refund_id,omitempty"`      // (非必填,四选一) 微信退款单号
	Offset        string `json:"offset,omitempty"`         // (非必填) 偏移量,当部分退款次数超过10次时可使用,表示返回的查询结果从这个偏移量开始取记录
}

查询退款的参数

type QueryRefundResponse

type QueryRefundResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	TransactionId      string `xml:"transaction_id"`       // 微信订单号
	OutTradeNo         string `xml:"out_trade_no"`         // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
	TotalFee           int    `xml:"total_fee"`            // 订单总金额,单位为分,只能为整数,详见支付金额
	SettlementTotalFee int    `xml:"settlement_total_fee"` // 当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。
	FeeType            string `xml:"fee_type"`             // 订单金额货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	CashFee            int    `xml:"cash_fee"`             // 现金支付金额,单位为分,只能为整数,详见支付金额
	RefundCount        int    `xml:"refund_count"`         // 当前返回退款笔数
	TotalRefundCount   int    `xml:"total_refund_count"`   // 订单总共已发生的部分退款次数,当请求参数传入offset后有返回
	// 使用refund_count的序号生成的当前退款项
	CurrentRefunds []QueryRefundResponseCurrentRefund `xml:"-"`
	// 使用total_refund_count的序号生成的总退款项
	TotalRefunds []QueryRefundResponseTotalRefund `xml:"-"`
}

查询退款的返回值

type QueryRefundResponseCurrentRefund

type QueryRefundResponseCurrentRefund struct {
	OutRefundNo   string // 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
	RefundId      string // 微信退款单号
	RefundChannel string // ORIGINAL—原路退款 BALANCE—退回到余额 OTHER_BALANCE—原账户异常退到其他余额账户 OTHER_BANKCARD—原银行卡异常退到其他银行卡
}

type QueryRefundResponseTotalRefund

type QueryRefundResponseTotalRefund struct {
	RefundFee           int64  // 退款总金额,单位为分,可以做部分退款
	SettlementRefundFee int64  // 退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
	CouponRefundFee     int64  // 代金券退款金额<=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠
	CouponRefundCount   int64  // 退款代金券使用数量 ,$n为下标,从0开始编号
	RefundStatus        string // 退款状态:SUCCESS—退款成功 REFUNDCLOSE—退款关闭 PROCESSING—退款处理中 CHANGE—退款异常,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,可前往商户平台(pay.weixin.qq.com)-交易中心,手动处理此笔退款。$n为下标,从0开始编号。
	RefundAccount       string // REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户 REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款 $n为下标,从0开始编号。
	RefundRecvAccout    string // 取当前退款单的退款入账方 1)退回银行卡:{银行名称}{卡类型}{卡尾号} 2)退回支付用户零钱: 支付用户零钱 3)退还商户: 商户基本账户 商户结算银行账户 4)退回支付用户零钱通: 支付用户零钱通
	RefundSuccessTime   string // 退款成功时间,当退款状态为退款成功时有返回。$n为下标,从0开始编号。
	// 使用coupon_refund_count的序号生成的代金券项
	Coupons []CouponResponseModel
}

type RefundBody

type RefundBody struct {
	TransactionId string `json:"transaction_id"`            // 微信支付订单号
	OutTradeNo    string `json:"out_trade_no"`              // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
	OutRefundNo   string `json:"out_refund_no"`             // 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
	TotalFee      int    `json:"total_fee"`                 // 订单总金额,单位为分,只能为整数,详见支付金额
	RefundFee     int    `json:"refund_fee"`                // 退款总金额,单位为分,只能为整数,可部分退款。详见支付金额
	RefundFeeType string `json:"refund_fee_type,omitempty"` // 退款货币类型,需与支付一致,或者不填。符合ISO 4217标准的三位字母代码,默认人民币:CNY
	RefundDesc    string `json:"refund_desc,omitempty"`     // 现退款原因
	RefundAccount string `json:"refund_account,omitempty"`  // 退款资金来源(见constatnt定义)
	NotifyUrl     string `json:"notify_url,omitempty"`      // 异步接收微信支付退款结果通知的回调地址
}

申请退款的参数

type RefundNotifyBody

type RefundNotifyBody struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	ReqInfo string `xml:"req_info"` // 加密信息请用商户秘钥进行解密,详见解密方式
	// 返回的加密字段
	TransactionId       string `xml:"transaction_id"`        // 微信订单号
	OutTradeNo          string `xml:"out_trade_no"`          // 商户系统内部的订单号
	RefundId            string `xml:"refund_id"`             // 微信退款单号
	OutRefundNo         string `xml:"out_refund_no"`         // 商户退款单号
	TotalFee            int    `xml:"total_fee"`             // 订单总金额,单位为分,只能为整数,详见支付金额
	SettlementTotalFee  int    `xml:"settlement_total_fee"`  // 当该订单有使用非充值券时,返回此字段。应结订单金额=订单金额-非充值代金券金额,应结订单金额<=订单金额。
	RefundFee           int    `xml:"refund_fee"`            // 退款总金额,单位为分
	SettlementRefundFee int    `xml:"settlement_refund_fee"` // 退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
	RefundStatus        string `xml:"refund_status"`         // 退款状态(RefundStatusXXX)
	SuccessTime         string `xml:"success_time"`          // 资金退款至用户帐号的时间,格式2017-12-15 09:46:01
	RefundRecvAccount   string `xml:"refund_recv_accout"`    // TODO 取当前退款单的退款入账方 1)退回银行卡:{银行名称}{卡类型}{卡尾号} 2)退回支付用户零钱: 支付用户零钱 3)退还商户: 商户基本账户 商户结算银行账户 4)退回支付用户零钱通: 支付用户零钱通
	RefundAccount       string `xml:"refund_account"`        // 退款资金来源(RefundAccountXXX)
	RefundRequestSource string `xml:"refund_request_source"` // 退款发起来源(RefundRequestSourceXXX)
}

退款结果通知的参数

type RefundNotifyHandler

type RefundNotifyHandler func(RefundNotifyBody) (NotifyResponseModel, error)

type RefundResponse

type RefundResponse struct {
	ResponseModel
	ServiceResponseModel
	TransactionId       string `xml:"transaction_id"`
	OutTradeNo          string `xml:"out_trade_no"`
	OutRefundNo         string `xml:"out_refund_no"`
	RefundId            string `xml:"refund_id"`
	RefundFee           int    `xml:"refund_fee"`
	SettlementRefundFee int    `xml:"settlement_refund_fee"`
	TotalFee            int    `xml:"total_fee"`
	SettlementTotalFee  int    `xml:"settlement_total_fee"`
	FeeType             string `xml:"fee_type"`
	CashFee             int    `xml:"cash_fee"`
	CashRefundFee       int    `xml:"cash_refund_fee"`
	CouponRefundFee     int    `xml:"coupon_refund_fee"`
	CouponRefundCount   int    `xml:"coupon_refund_count"`
	// 使用coupon_refund_count的序号生成的优惠券项
	RefundCoupons []CouponResponseModel `xml:"-"`
}

申请退款的返回值

type ReportJsApiBody

type ReportJsApiBody struct {
	SignType     string `json:"sign_type,omitempty"`    // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	DeviceInfo   string `json:"device_info,omitempty"`  // (非必填) 微信支付分配的终端设备号,商户自定义
	InterfaceUrl string `json:"interface_url"`          // 上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder 对于刷卡支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次刷卡行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total 关于两种接入模式具体可参考本文档章节:刷卡支付商户接入模式 其它接口调用仍然按照调用一次,上报一次来进行。
	ExecuteTime  int64  `json:"execute_time"`           // 接口耗时情况,单位为毫秒
	ReturnCode   string `json:"return_code"`            // SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断
	ReturnMsg    string `json:"return_msg,omitempty"`   // (非必填) 返回信息,如非空,为错误原因 签名失败 参数格式校验错误
	ResultCode   string `json:"result_code"`            // SUCCESS/FAIL
	ErrCode      string `json:"err_code,omitempty"`     // (非必填) ORDERNOTEXIST—订单不存在 SYSTEMERROR—系统错误
	ErrCodeDes   string `json:"err_code_des,omitempty"` // (非必填) 结果信息描述
	OutTradeNo   string `json:"out_trade_no,omitempty"` // (非必填) 商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。
	UserIp       string `json:"user_ip"`                // 发起接口调用时的机器IP
	Time         string `json:"time,omitempty"`         // (非必填) 系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
}

交易保障(JSAPI)的参数

type ReportJsApiResponse

type ReportJsApiResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ResultCode string `xml:"result_code"` // SUCCESS/FAIL
}

交易保障(JSAPI)的返回值

type ReportMicropayBody

type ReportMicropayBody struct {
	SignType     string `json:"sign_type,omitempty"`   // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	DeviceInfo   string `json:"device_info,omitempty"` // (非必填) 微信支付分配的终端设备号,商户自定义
	InterfaceUrl string `json:"interface_url"`         // (不需要手动填写) 上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder 对于刷卡支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次刷卡行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total 关于两种接入模式具体可参考本文档章节:刷卡支付商户接入模式 其它接口调用仍然按照调用一次,上报一次来进行。
	UserIp       string `json:"user_ip"`               // 发起接口调用时的机器IP
	TradesStr    string `json:"trades"`                // POS机采集的交易信息列表,使用JSON格式的数组
	// 生成TradesStr
	Trades []ReportMicropayBodyTrade `json:"-"`
}

交易保障(MICROPAY)的参数

type ReportMicropayBodyTrade

type ReportMicropayBodyTrade struct {
	OutTradeNo string `json:"out_trade_no"`      // 商户订单号
	BeginTime  string `json:"begin_time"`        // 交易开始时间(扫码时间)
	EndTime    string `json:"end_time"`          // 交易完成时间
	State      string `json:"state"`             // 交易结果,OK-成功 FAIL-失败 CANCLE-取消
	ErrMsg     string `json:"err_msg,omitempty"` // 自定义的错误描述信息
}

type ReportMicropayResponse

type ReportMicropayResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ResultCode string `xml:"result_code"` // SUCCESS/FAIL
}

交易保障(MICROPAY)的返回值

type ResponseBase

type ResponseBase struct {
	ErrCode int    `json:"errcode"` // 错误码
	ErrMsg  string `json:"errmsg"`  // 错误信息
}

返回结果的通信标识

func CheckAuthAccessToken

func CheckAuthAccessToken(accessToken, openId string) (resp ResponseBase, err error)

检验网页授权的access_token是否有效

type ResponseModel

type ResponseModel struct {
	ReturnCode string `xml:"return_code"` // SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
	ReturnMsg  string `xml:"return_msg"`  // 返回信息,如非空,为错误原因:签名失败/参数格式校验错误
	RetMsg     string `xml:"retmsg"`      // 沙盒时返回的错误信息
}

返回结果的通信标识

type ReverseBody

type ReverseBody struct {
	TransactionId string `json:"transaction_id,omitempty"` // 微信支付订单号
	OutTradeNo    string `json:"out_trade_no"`             // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
}

撤销订单的参数

type ReverseResponse

type ReverseResponse struct {
	ResponseModel
	ServiceResponseModel
	Recall string `xml:"recall"` // 是否需要继续调用撤销,Y-需要,N-不需要
}

撤销订单的返回值

type SceneInfoModel

type SceneInfoModel struct {
	ID       string `json:"id"`        // 门店唯一标识
	Name     string `json:"name"`      // 门店名称
	AreaCode string `json:"area_code"` // 门店所在地行政区划码,详细见《最新县及县以上行政区划代码》
	Address  string `json:"address"`   // 门店详细地址
}

场景信息模型

type ServiceResponseModel

type ServiceResponseModel struct {
	AppId      string `xml:"appid"`        // 微信分配的公众账号ID
	MchId      string `xml:"mch_id"`       // 微信支付分配的商户号
	SubAppId   string `xml:"sub_appid"`    // (服务商模式) 微信分配的子商户公众账号ID
	SubMchId   string `xml:"sub_mch_id"`   // (服务商模式) 微信支付分配的子商户号
	NonceStr   string `xml:"nonce_str"`    // 随机字符串,不长于32位
	Sign       string `xml:"sign"`         // 签名,详见签名生成算法
	ResultCode string `xml:"result_code"`  // SUCCESS/FAIL
	ErrCode    string `xml:"err_code"`     // 详细参见第6节错误列表
	ErrCodeDes string `xml:"err_code_des"` // 错误返回的信息描述
}

业务返回结果的错误信息

type UnifiedOrderBody

type UnifiedOrderBody struct {
	SignType       string `json:"sign_type,omitempty"`   // 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
	DeviceInfo     string `json:"device_info,omitempty"` // (非必填) 终端设备号(门店号或收银设备ID),注意:PC网页或JSAPI支付请传"WEB"
	Body           string `json:"body"`                  // 商品描述交易字段格式根据不同的应用场景建议按照以下格式上传: (1)PC网站——传入浏览器打开的网站主页title名-实际商品名称,例如:腾讯充值中心-QQ会员充值;(2) 公众号——传入公众号名称-实际商品名称,例如:腾讯形象店- image-QQ公仔;(3) H5——应用在浏览器网页上的场景,传入浏览器打开的移动网页的主页title名-实际商品名称,例如:腾讯充值中心-QQ会员充值;(4) 线下门店——门店品牌名-城市分店名-实际商品名称,例如: image形象店-深圳腾大- QQ公仔)(5) APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
	Detail         string `json:"detail,omitempty"`      // (非必填) TODO 商品详细描述,对于使用单品优惠的商户,该字段必须按照规范上传,详见"单品优惠参数说明"
	Attach         string `json:"attach,omitempty"`      // (非必填) 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	OutTradeNo     string `json:"out_trade_no"`          // 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
	FeeType        string `json:"fee_type,omitempty"`    // (非必填) 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
	TotalFee       int    `json:"total_fee"`             // 订单总金额,单位为分,只能为整数,详见支付金额
	SpbillCreateIP string `json:"spbill_create_ip"`      // 支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP
	TimeStart      string `json:"time_start,omitempty"`  // (非必填) 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
	TimeExpire     string `json:"time_expire,omitempty"` // (非必填) 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。订单失效时间是针对订单号而言的,由于在请求支付的时候有一个必传参数prepay_id只有两小时的有效期,所以在重入时间超过2小时的时候需要重新请求下单接口获取新的prepay_id。其他详见时间规则。建议:最短失效时间间隔大于1分钟
	GoodsTag       string `json:"goods_tag,omitempty"`   // (非必填) TODO 订单优惠标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	NotifyUrl      string `json:"notify_url"`            // 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
	TradeType      string `json:"trade_type"`            // JSAPI-JSAPI支付 NATIVE-Native支付 APP-APP支付 说明详见参数规定
	ProductId      string `json:"product_id,omitempty"`  // (非必填) trade_type=NATIVE时,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
	LimitPay       string `json:"limit_pay,omitempty"`   // (非必填) no_credit:指定不能使用信用卡支付
	OpenId         string `json:"openid,omitempty"`      // (非必填) trade_type=JSAPI,此参数必传,用户在主商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。
	SubOpenId      string `json:"sub_openid,omitempty"`  // (非必填) trade_type=JSAPI,此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。
	Receipt        string `json:"receipt,omitempty"`     // (非必填) Y,传入Y时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效
	SceneInfo      string `json:"scene_info,omitempty"`  // (非必填) 该字段用于上报场景信息,目前支持上报实际门店信息。该字段为JSON对象数据,对象格式为{"store_info":{"id": "门店ID","name": "名称","area_code": "编码","address": "地址" }} ,字段详细说明请点击行前的+展开
	// 用于生成SceneInfo
	SceneInfoModel *SceneInfoModel `json:"-"`
}

统一下单的参数

type UnifiedOrderResponse

type UnifiedOrderResponse struct {
	ResponseModel
	// 当return_code为SUCCESS时
	ServiceResponseModel
	DeviceInfo string `xml:"device_info"` // 调用接口提交的终端设备号
	// 当return_code 和result_code都为SUCCESS时
	TradeType string `xml:"trade_type"` // JSAPI-公众号支付 NATIVE-Native支付 APP-APP支付 说明详见参数规定
	PrepayId  string `xml:"prepay_id"`  // 微信生成的预支付回话标识,用于后续接口调用中使用,该值有效期为2小时
	CodeUrl   string `xml:"code_url"`   // trade_type=NATIVE时有返回,此url用于生成支付二维码,然后提供给用户进行扫码支付。注意:code_url的值并非固定,使用时按照URL格式转成二维码即可
	MWebUrl   string `xml:"mweb_url"`   // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。
}

统一下单的返回值

type UserInfo

type UserInfo struct {
	OpenId         string   `json:"openid"`          // 用户唯一标识
	Nickname       string   `json:"nickname"`        // 用户的昵称
	Sex            int      `json:"sex"`             // 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
	Language       string   `json:"language"`        // 用户的语言,简体中文为zh_CN
	Province       string   `json:"province"`        // 用户所在省份
	City           string   `json:"city"`            // 用户所在城市
	Country        string   `json:"country"`         // 用户所在国家
	HeadimgUrl     string   `json:"headimgurl"`      // 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
	Privilege      []string `json:"privilege"`       // 用户特权信息
	UnionId        string   `json:"unionid"`         // 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
	Subscribe      int      `json:"subscribe"`       // 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
	SubscribeTime  int      `json:"subscribe_time"`  // 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
	SubscribeScene string   `json:"subscribe_scene"` // 返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENEPROFILE LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_OTHERS 其他
	Remark         string   `json:"remark"`          // 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
	GroupId        int      `json:"groupid"`         // 用户所在的分组ID(兼容旧的用户分组接口)
	TagidList      []int    `json:"tagid_list"`      // 用户被打上的标签ID列表
	QrScene        int      `json:"qr_scene"`        // 二维码扫码场景(开发者自定义)
	QrSceneStr     string   `json:"qr_scene_str"`    // 二维码扫码场景描述(开发者自定义)
	ErrCode        int      `json:"errcode"`         // 错误码
	ErrMsg         string   `json:"errmsg"`          // 错误信息
}

func GetAuthUserInfo

func GetAuthUserInfo(accessToken, openId, lang string) (userInfo UserInfo, err error)

获取用户基本信息(授权机制)

func GetBasicUserInfo

func GetBasicUserInfo(accessToken, openId, lang string) (userInfo UserInfo, err error)

获取用户基本信息(UnionID机制)

Jump to

Keyboard shortcuts

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