rswxpay 0.1.0

WeChat Pay V3 API SDK for Rust — pure Rust crypto, no OpenSSL
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize)]
pub struct RefundRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub transaction_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub out_trade_no: Option<String>,
    pub out_refund_no: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reason: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub notify_url: Option<String>,
    pub amount: RefundAmount,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub funds_account: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub goods_detail: Option<Vec<RefundGoodsDetail>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RefundAmount {
    pub refund: i64,
    pub total: i64,
    pub currency: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub from: Option<Vec<RefundFrom>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RefundFrom {
    pub account: String,
    pub amount: i64,
}

#[derive(Debug, Clone, Serialize)]
pub struct RefundGoodsDetail {
    pub merchant_goods_id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub wechatpay_goods_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub goods_name: Option<String>,
    pub unit_price: i64,
    pub refund_amount: i64,
    pub refund_quantity: i32,
}

#[derive(Debug, Clone, Deserialize)]
pub struct RefundResponse {
    pub refund_id: String,
    pub out_refund_no: String,
    pub transaction_id: String,
    pub out_trade_no: String,
    pub channel: String,
    pub user_received_account: String,
    #[serde(default)]
    pub success_time: Option<String>,
    pub create_time: String,
    pub status: String,
    pub amount: RefundResponseAmount,
    #[serde(default)]
    pub funds_account: Option<String>,
}

#[derive(Debug, Clone, Deserialize)]
pub struct RefundResponseAmount {
    pub total: i64,
    pub refund: i64,
    pub payer_total: i64,
    pub payer_refund: i64,
    pub settlement_refund: i64,
    pub settlement_total: i64,
    pub discount_refund: i64,
    pub currency: String,
    #[serde(default)]
    pub from: Option<Vec<RefundFrom>>,
}