use crate::{RequestMethod, TradeType};
#[allow(unused)]
#[derive(Debug, PartialEq, Clone)]
pub enum WechatPayMethod {
WxPay(WxPayMethod),
EntPay(EntPayMethod),
Certificate,
Custom(String)
}
#[allow(unused)]
#[derive(Debug, PartialEq, Clone)]
pub enum EntPayMethod {
}
#[allow(unused)]
#[derive(Debug, PartialEq, Clone)]
pub enum WxPayMethod {
UnifiedOrder,
UnifiedOrderV3(TradeType),
IsvUnifiedOrderV3(TradeType),
MicroPay,
CloseOrder,
CloseOrderV3(String),
QueryOrder,
QueryOrderV3((Option<String>, Option<String>)),
QueryRefundOrder,
QueryRefundOrderV2,
QueryRefundOrderV3(String),
Refund,
RefundV3,
ReverseOrder,
ShortUrl,
}
#[allow(unused)]
impl RequestMethod for WechatPayMethod {
fn get_method(&self) -> String {
match self {
WechatPayMethod::WxPay(v) => v.get_method(),
WechatPayMethod::EntPay(_) => {
String::default()
}
WechatPayMethod::Certificate => String::from("/v3/certificates"),
WechatPayMethod::Custom(v) => v.to_string()
}
}
}
#[allow(unused)]
impl WxPayMethod {
pub fn get_method(&self) -> String {
match self {
WxPayMethod::UnifiedOrder => String::from("/pay/unifiedorder"),
WxPayMethod::MicroPay => String::from("/pay/micropay"),
WxPayMethod::CloseOrder => String::from("/pay/closeorder"),
WxPayMethod::Refund => String::from("/pay/refund"),
WxPayMethod::RefundV3 => String::from("/v3/refund/domestic/refunds"),
WxPayMethod::QueryOrder => String::from("/pay/orderquery"),
WxPayMethod::ShortUrl => String::from("/tools/shorturl"),
WxPayMethod::QueryOrderV3((otr, tid)) => {
if let Some(otr) = otr {
format!("/v3/pay/transactions/out-trade-no/{}", otr)
} else {
let tid = tid.to_owned().unwrap_or_default();
format!("/v3/pay/transactions/id/{}", tid)
}
},
WxPayMethod::CloseOrderV3(v) => format!("/v3/pay/transactions/out-trade-no/{}/close", v),
WxPayMethod::UnifiedOrderV3(v) => {
match v {
TradeType::MWeb => String::from("/v3/pay/transactions/h5"),
TradeType::Jsapi => String::from("/v3/pay/transactions/jsapi"),
TradeType::Native => String::from("/v3/pay/transactions/native"),
TradeType::App => String::from("/v3/pay/transactions/app"),
_ => String::default()
}
}
WxPayMethod::IsvUnifiedOrderV3(v) => {
match v {
TradeType::MWeb => String::from("/v3/pay/partner/transactions/h5"),
TradeType::Jsapi => String::from("/v3/pay/partner/transactions/jsapi"),
TradeType::Native => String::from("/v3/pay/partner/transactions/native"),
TradeType::App => String::from("/v3/pay/partner/transactions/app"),
_ => String::default()
}
}
WxPayMethod::QueryRefundOrder => String::from("/pay/refundquery"),
WxPayMethod::QueryRefundOrderV2 => String::from("/pay/refundqueryv2"),
WxPayMethod::QueryRefundOrderV3(v) => format!("/v3/refund/domestic/refunds/{}", v),
WxPayMethod::ReverseOrder => String::from("/secapi/pay/reverse"),
}
}
}