// Package fuiou 富友支付 SDK
// 实现富友 wxPreCreate 接口的签名、通信和回调处理
package fuiou

import "encoding/xml"

// WxPreCreateRequest wxPreCreate 下单请求（3.3接口）
// 所有非 reserved 字段必须出现在 XML 中（含空值），否则富友验签不通过
type WxPreCreateRequest struct {
	XMLName      xml.Name `xml:"xml"`
	Version      string   `xml:"version"`        // 版本号: 1.0
	InsCd        string   `xml:"ins_cd"`         // 机构号
	MchntCd      string   `xml:"mchnt_cd"`       // 商户号
	TermId       string   `xml:"term_id"`        // 终端号
	RandomStr    string   `xml:"random_str"`     // 随机字符串
	Sign         string   `xml:"sign"`           // 签名
	GoodsDesc    string   `xml:"goods_des"`      // 商品描述
	GoodsDetail  string   `xml:"goods_detail"`   // 商品详情（可选）
	GoodsTag     string   `xml:"goods_tag"`      // 商品标记（可选）
	ProductId    string   `xml:"product_id"`     // 商品标识（可选）
	AddnInf      string   `xml:"addn_inf"`       // 附加数据（可选）
	MchntOrderNo string   `xml:"mchnt_order_no"` // 商户订单号
	CurrType     string   `xml:"curr_type"`      // 货币类型（可选）
	OrderAmt     string   `xml:"order_amt"`      // 订单金额（分）
	TermIp       string   `xml:"term_ip"`        // 终端IP
	TxnBeginTs   string   `xml:"txn_begin_ts"`   // 交易起始时间，格式 yyyyMMddHHmmss
	NotifyUrl    string   `xml:"notify_url"`     // 回调地址
	LimitPay     string   `xml:"limit_pay"`      // 限制支付方式（可选）
	TradeType    string   `xml:"trade_type"`     // 交易类型: JSAPI=公众号 LETPAY=小程序
	Openid       string   `xml:"openid"`         // 用户标识（已废弃，保留参与签名）
	SubOpenid    string   `xml:"sub_openid"`     // 用户OpenID
	SubAppid     string   `xml:"sub_appid"`      // 子应用ID（公众号/小程序AppID）
}

// WxPreCreateResponse wxPreCreate 下单响应
type WxPreCreateResponse struct {
	ResultCode        string `xml:"result_code"`          // 结果码: 000000=成功
	ResultMsg         string `xml:"result_msg"`           // 结果消息
	InsCd             string `xml:"ins_cd"`               // 机构号
	MchntCd           string `xml:"mchnt_cd"`             // 商户号
	RandomStr         string `xml:"random_str"`           // 随机字符串
	Sign              string `xml:"sign"`                 // 签名
	ReservedFyTraceNo string `xml:"reserved_fy_trace_no"` // 富友流水号
	// JSAPI 支付参数
	SdkAppid     string `xml:"sdk_appid"`     // 应用ID
	SdkTimestamp string `xml:"sdk_timestamp"` // 时间戳
	SdkNoncestr  string `xml:"sdk_noncestr"`  // 随机字符串
	SdkPrepayid  string `xml:"sdk_prepayid"`  // 预支付ID
	SdkPackage   string `xml:"sdk_package"`   // 扩展字段
	SdkSigntype  string `xml:"sdk_signtype"`  // 签名类型
	SdkPaysign   string `xml:"sdk_paysign"`   // 支付签名
}

// NotifyRequest 支付回调请求
type NotifyRequest struct {
	MchntCd           string `xml:"mchnt_cd"`             // 商户号
	InsCd             string `xml:"ins_cd"`               // 机构号
	MchntOrderNo      string `xml:"mchnt_order_no"`       // 商户订单号
	OrderAmt          string `xml:"order_amt"`            // 订单金额（分）
	SettleOrderAmt    string `xml:"settle_order_amt"`     // 清算订单金额（分）
	CurrType          string `xml:"curr_type"`            // 货币类型
	OrderType         string `xml:"order_type"`           // 支付类型
	TermId            string `xml:"term_id"`              // 终端号
	TransactionId     string `xml:"transaction_id"`       // 交易流水号
	TxnFinTs          string `xml:"txn_fin_ts"`           // 交易完成时间
	UserId            string `xml:"user_id"`              // 用户标识
	ResultCode        string `xml:"result_code"`          // 结果码
	ResultMsg         string `xml:"result_msg"`           // 结果消息
	Sign              string `xml:"sign"`                 // 签名
	RandomStr         string `xml:"random_str"`           // 随机字符串
	ReservedFyTraceNo string `xml:"reserved_fy_trace_no"` // 富友流水号
}

// NotifyResponse 回调响应
type NotifyResponse struct {
	XMLName    xml.Name `xml:"xml"`
	ResultCode string   `xml:"result_code"` // 结果码
	ResultMsg  string   `xml:"result_msg"`  // 结果消息
}
