package wx import ( "encoding/xml" "fmt" "hudongzhuanjia/utils/define" ) //var ( // WxCertPath = `./cacert/apiclient_cert.pem` // WxKeyPath = `./cacert/apiclient_key.pem` // WxCaPath = `./cacert/rootca.pem` // Appid = "wx7b0bcf476552c5e9" // Secret = "f6aabdd40ea25272f4442603a7dc8028" // Mchid = `1394404502` // ApiKey = `2c82c64ceec6ba89ffc9f593c671a12f` // mainHost = `https://api.mch.weixin.qq.com` // backHost = `https://api2.mch.weixin.qq.com` //) var ( RedirectUri = "http://api.hudongzhuanjia.com/" CodeUrl = "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_login&state=%s#wechat_redirect" AccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code " RefreshTokenUrl = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s" AuthUrl = "https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s" UserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s" TicketTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" TicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi" Expired = 7200 ) var ( NotifyURL = fmt.Sprintf("%s/wechat/callback", define.HOST) // 微信回调通知 UnifiedOrderURL = fmt.Sprintf("%s/pay/unifiedorder", define.WxHost) // 统一下单url QueryOrderURL = fmt.Sprintf("%s/pay/orderquery", define.WxHost) // 微信查询订单 CloseOrderURL = fmt.Sprintf("%s/pay/closeorder", define.WxHost) // 微信关闭订单 RefundURL = fmt.Sprintf("%s/secapi/pay/refund", define.WxHost) // 微信退款 RefundQueryURL = fmt.Sprintf("%s/pay/refundquery", define.WxHost) // 微信查询退款 DownloadBillURL = fmt.Sprintf("%s/pay/downloadbill", define.WxHost) // 微信下载账单 DownloadFundFlowURL = fmt.Sprintf("%s/pay/downloadfundflow", define.WxHost) TransfersURL = fmt.Sprintf("%s/mmpaymkttransfers/promotion/transfers", define.WxHost) SendRedPackURL = fmt.Sprintf("%s/mmpaymkttransfers/sendredpack", define.WxHost) QueryRedPackURL = fmt.Sprintf("%s/mmpaymkttransfers/gethbinfo", define.WxHost) ) type CommonReturn struct { ReturnCode string `xml:"return_code,omitempty" json:"return_code,omitempty"` ReturnMsg string `xml:"return_msg,omitempty" json:"return_msg,omitempty"` } type CommonResult struct { ResultCode string `xml:"result_code,omitempty" json:"result_code,omitempty"` ResultMsg string `xml:"result_msg,omitempty" json:"result_msg,omitempty"` ErrCode string `xml:"err_code,omitempty" json:"err_code,omitempty"` ErrCodeDes string `xml:"err_code_des,omitempty" json:"err_code_des,omitempty"` } type CommonParam struct { Appid string `xml:"appid,omitempty" json:"appid,omitempty"` MchId string `xml:"mch_id,omitempty" json:"mch_id,omitempty"` NonceStr string `xml:"nonce_str,omitempty" json:"nonce_str,omitempty"` Sign string `xml:"sign,omitempty" json:"sign,omitempty"` SignType string `xml:"sign_type,omitempty" json:"sign_type,omitempty"` } // ========================================== 基础配置 type UnifiedOrderParam struct { CommonParam XMLName xml.Name `xml:"xml" json:"xml_name,omitempty"` DeviceInfo string `xml:"device_info,omitempty" json:"device_info,omitempty"` Body cdata `xml:"body,omitempty" json:"body,omitempty"` Detail cdata `xml:"detail,omitempty" json:"detail,omitempty"` Attach string `xml:"attach,omitempty" json:"attach,omitempty"` OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` FeeType string `xml:"fee_type,omitempty" json:"fee_type,omitempty"` TotalFee string `xml:"total_fee,omitempty" json:"total_fee,omitempty"` SpbillCreateIp string `xml:"spbill_create_ip,omitempty" json:"spbill_create_ip,omitempty"` TimeStart string `xml:"time_start,omitempty" json:"time_start,omitempty"` TimeExpire string `xml:"time_expire,omitempty" json:"time_expire,omitempty"` GoodsTag string `xml:"goods_tag,omitempty" json:"goods_tag,omitempty"` NotifyUrl string `xml:"notify_url,omitempty" json:"notify_url,omitempty"` TradeType string `xml:"trade_type,omitempty" json:"trade_type,omitempty"` ProductId string `xml:"product_id,omitempty" json:"product_id,omitempty"` LimitPay string `xml:"limit_pay,omitempty" json:"limit_pay,omitempty"` Openid string `xml:"openid,omitempty" json:"openid,omitempty"` Receipt string `xml:"receipt,omitempty" json:"receipt,omitempty"` SceneInfo *UnifiedOrderSceneInfo `xml:"scene_info,omitempty" json:"scene_info,omitempty"` } type UnifiedOrderSceneInfo struct { Id string `xml:"id,omitempty" json:"id,omitempty"` Name string `xml:"name,omitempty" json:"name,omitempty"` AreaCode string `xml:"area_code,omitempty" json:"area_code,omitempty"` Address string `xml:"address,omitempty" json:"address,omitempty"` } type UnifiedOrderResult struct { CommonReturn CommonResult CommonParam DeviceInfo string `xml:"device_info,omitempty" json:"device_info,omitempty"` NonceStr string `xml:"nonce_str,omitempty" json:"nonce_str,omitempty"` TradeType string `xml:"trade_type,omitempty" json:"trade_type,omitempty"` PrepayId string `xml:"prepay_id,omitempty" json:"prepay_id,omitempty"` CodeUrl string `xml:"code_url,omitempty" json:"code_url,omitempty"` } // =================================================支付 type QueryOrderParam struct { CommonParam XMLName xml.Name `xml:"xml" json:"xml_name,omitempty"` TransactionId string `xml:"transaction_id,omitempty" json:"transaction_id,omitempty"` OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` } type QueryOrderResult struct { CommonReturn CommonResult CommonParam DeviceInfo string `xml:"device_info" json:"device_info,omitempty"` Openid string `xml:"openid" json:"openid,omitempty"` IsSubscribe string `xml:"is_subscribe" json:"is_subscribe,omitempty"` TradeType string `xml:"trade_type" json:"trade_type,omitempty"` TradeState string `xml:"trade_state" json:"trade_state,omitempty"` BankType string `xml:"bank_type" json:"bank_type,omitempty"` TotalFee string `xml:"total_fee" json:"total_fee,omitempty"` SettlementTotalFee string `xml:"settlement_total_fee" json:"settlement_total_fee,omitempty"` FeeType string `xml:"fee_type" json:"fee_type,omitempty"` CashFee string `xml:"cash_fee" json:"cash_fee,omitempty"` CashFeeType string `xml:"cash_fee_type" json:"cash_fee_type,omitempty"` CouponFee string `xml:"coupon_fee" json:"coupon_fee,omitempty"` CouponCount string `xml:"coupon_count" json:"coupon_count,omitempty"` CouponTypeN string `xml:"coupon_type_$n" json:"coupon_type_$n,omitempty"` CouponIdN string `xml:"coupon_id_$n" json:"coupon_id_$n,omitempty"` CouponFeeN string `xml:"coupon_fee_$n" json:"coupon_fee_$n,omitempty"` TransactionId string `xml:"transaction_id" json:"transaction_id,omitempty"` OutTradeNo string `xml:"out_trade_no" json:"out_trade_no,omitempty"` Attach string `xml:"attach" json:"attach,omitempty"` TimeEnd string `xml:"time_end" json:"time_end,omitempty"` TradeStateDesc string `xml:"trade_state_desc" json:"trade_state_desc,omitempty"` } // ============================================================查询订单 type CloseOrderParam struct { CommonParam XMLName xml.Name `xml:"xml" json:"xml_name,omitempty"` OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` } type CloseOrderResult struct { CommonReturn CommonResult CommonParam } // ======================================== 关闭订单 type RefundParam struct { CommonParam XMLName xml.Name `xml:"xml" json:"xml_name,omitempty"` TransactionId string `xml:"transaction_id,omitempty" json:"transaction_id,omitempty"` // 与订单号二选一 OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` OutRefundNo string `xml:"out_refund_no,omitempty" json:"out_refund_no,omitempty"` TotalFee string `xml:"total_fee,omitempty" json:"total_fee,omitempty"` RefundFee string `xml:"refund_fee,omitempty" json:"refund_fee,omitempty"` RefundFeeType string `xml:"refund_fee_type,omitempty" json:"refund_fee_type,omitempty"` RefundDesc string `xml:"refund_desc,omitempty" json:"refund_desc,omitempty"` RefundAccount string `xml:"refund_account,omitempty" json:"refund_account,omitempty"` NotifyUrl string `xml:"notify_url,omitempty" json:"notify_url,omitempty"` } type RefundResult struct { CommonReturn CommonResult CommonParam TransactionId string `xml:"transaction_id,omitempty" json:"transaction_id"` OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` OutRefundNo string `xml:"out_refund_no,omitempty" json:"out_refund_no,omitempty"` RefundId string `xml:"refund_id,omitempty" json:"refund_id,omitempty"` RefundFee int `xml:"refund_fee,omitempty" json:"refund_fee,omitempty"` SettlementRefundFee int `xml:"settlement_refund_fee,omitempty" json:"settlement_refund_fee,omitempty"` TotalFee int `xml:"total_fee,omitempty" json:"total_fee,omitempty"` SettlementTotalFee int `xml:"settlement_total_fee,omitempty" json:"settlement_total_fee,omitempty"` FeeType string `xml:"fee_type,omitempty" json:"fee_type,omitempty"` CashFee int `xml:"cash_fee,omitempty" json:"cash_fee,omitempty"` CashFeeType string `xml:"cash_fee_type,omitempty" json:"cash_fee_type,omitempty"` CashRefundFee string `xml:"cash_refund_fee,omitempty" json:"cash_refund_fee,omitempty"` CouponTypeN string `xml:"coupon_type_$n,omitempty" json:"coupon_type_$n,omitempty"` CouponRefundFee string `xml:"coupon_refund_fee,omitempty" json:"coupon_refund_fee,omitempty"` CouponRefundFeeN string `xml:"coupon_refund_fee_$n,omitempty" json:"coupon_refund_fee_$n,omitempty"` CouponRefundCount string `xml:"coupon_refund_count,omitempty" json:"coupon_refund_count,omitempty"` CouponRefundIdN string `xml:"coupon_refund_id_$n,omitempty" json:"coupon_refund_id_$n,omitempty"` } // ===================================================== 退款申请 type RefundQueryParam struct { CommonParam XMLName xml.Name `xml:"xml" json:"xml_name,omitempty"` TransactionId string `xml:"transaction_id,omitempty" json:"transaction_id,omitempty"` OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` OutRefundNo string `xml:"out_refund_no,omitempty" json:"out_refund_no,omitempty"` RefundId string `xml:"refund_id,omitempty" json:"refund_id,omitempty"` Offset int `xml:"offset,omitempty" json:"offset,omitempty"` } type RefundQueryResult struct { CommonReturn CommonResult CommonParam TransactionId string `xml:"transaction_id,omitempty" json:"transaction_id,omitempty"` OutTradeNo string `xml:"out_trade_no,omitempty" json:"out_trade_no,omitempty"` TotalRefundCount int `xml:"total_refund_count,omitempty" json:"total_refund_count,omitempty"` TotalFee int `xml:"total_fee,omitempty" json:"total_fee,omitempty"` FeeType string `xml:"fee_type,omitempty" json:"fee_type,omitempty"` CashFee int `xml:"cash_fee,omitempty" json:"cash_fee,omitempty"` CashFeeType string `xml:"cash_fee_type,omitempty" json:"cash_fee_type,omitempty"` SettlementTotalFee int `xml:"settlement_total_fee,omitempty" json:"settlement_total_fee,omitempty"` RefundCount int `xml:"refund_count,omitempty" json:"refund_count,omitempty"` OutRefundNoN string `xml:"out_refund_no_$n,omitempty" json:"out_refund_no_$n,omitempty"` RefundIdN string `xml:"refund_id_$n,omitempty" json:"refund_id_$n,omitempty"` RefundChannelN string `xml:"refund_channel_$n,omitempty" json:"refund_channel_$n,omitempty"` RefundFeeN int `xml:"refund_fee_$n,omitempty" json:"refund_fee_$n,omitempty"` CouponRefundFeeN int `xml:"coupon_refund_fee_$n,omitempty" json:"coupon_refund_fee_$n,omitempty"` CouponRefundCountN int `xml:"coupon_refund_count_$n,omitempty" json:"coupon_refund_count_$n,omitempty"` CouponRefundIdNM string `xml:"coupon_refund_id_$n_$m,omitempty" json:"coupon_refund_id_$n_$m,omitempty"` CouponTypeNM string `xml:"coupon_type_$n_$m,omitempty" json:"coupon_type_$n_$m,omitempty"` CouponRefundFeeNM int `xml:"coupon_refund_fee_$n_$m,omitempty" json:"coupon_refund_fee_$n_$m,omitempty"` RefundStatusN string `xml:"refund_status_$n,omitempty" json:"refund_status_$n,omitempty"` RefundAccountN string `xml:"refund_account_$n" json:"refund_account_$n,omitempty"` RefundRecvAccoutN string `xml:"refund_recv_accout_$n,omitempty" json:"refund_recv_accout_$n,omitempty"` // 少了n RefundSuccessTimeN string `xml:"refund_success_time_$n,omitempty" json:"refund_success_time_$n,omitempty"` } // =================================================== 退款查询 type RedPackParam struct { CommonParam XMLName xml.Name `xml:"xml" json:"xml_name,omitempty"` Appid string `xml:"wxappid,omitempty" json:"wxappid,omitempty"` // wxappid MchBillno string `xml:"mch_billno,omitempty" json:"mch_billno,omitempty"` SendName string `xml:"send_name,omitempty" json:"send_name,omitempty"` ReOpenid string `xml:"re_openid,omitempty" json:"re_openid,omitempty"` TotalAmount int `xml:"total_amount,omitempty" json:"total_amount,omitempty"` TotalNum int `xml:"total_num,omitempty" json:"total_num,omitempty"` Wishing string `xml:"wishing,omitempty" json:"wishing,omitempty"` ClientIp string `xml:"client_ip,omitempty" json:"client_ip,omitempty"` ActName string `xml:"act_name,omitempty" json:"act_name,omitempty"` Remark string `xml:"remark,omitempty" json:"remark,omitempty"` SendId string `xml:"send_id,omitempty" json:"send_id,omitempty"` RiskInfo string `xml:"risk_info,omitempty" json:"risk_info,omitempty"` } type RedPackResult struct { CommonReturn CommonResult MchBillno string `xml:"mch_billno,omitempty" json:"mch_billno,omitempty"` MchId string `xml:"mch_id,omitempty" json:"mch_id,omitempty"` Wxappid string `xml:"wxappid,omitempty" json:"wxappid,omitempty"` // wxappid ReOpenid string `xml:"re_openid,omitempty" json:"re_openid,omitempty"` TotalAmount int `xml:"total_amount,omitempty" json:"total_amount,omitempty"` SendListid string `xml:"send_listid,omitempty" json:"send_listid,omitempty"` } type QueryRedPackResult struct { CommonReturn CommonResult MchBillno string `xml:"mch_billno,omitempty" json:"mch_billno,omitempty"` Mchid string `xml:"mchid,omitempty" json:"mchid,omitempty"` DetailId string `xml:"detail_id,omitempty" json:"detail_id,omitempty"` Status string `xml:"status,omitempty" json:"status,omitempty"` SendType string `xml:"send_type,omitempty" json:"send_type,omitempty"` HbType string `xml:"hb_type,omitempty" json:"hb_type,omitempty"` TotalNum int `xml:"total_num,omitempty" json:"total_num,omitempty"` TotalAmount int `xml:"total_amount,omitempty" json:"total_amount,omitempty"` Reason string `xml:"reason,omitempty" json:"reason,omitempty"` SendTime string `xml:"send_time,omitempty" json:"send_time,omitempty"` RefundTime string `xml:"refund_time,omitempty" json:"refund_time,omitempty"` RefundAmount int `xml:"refund_amount,omitempty" json:"refund_amount,omitempty"` Wishing string `xml:"wishing,omitempty" json:"wishing,omitempty"` Remark string `xml:"remark,omitempty" json:"remark,omitempty"` ActName string `xml:"act_name,omitempty" json:"act_name,omitempty"` }