乐趣区

关于微信支付:推荐一个好用的微信支付宝等Rust三方服务框架

说在后面

明天给大家举荐一个 Rust 的自研三方框架Labrador,外面封装了淘宝客、京东联盟、微信领取、微信公众号、支付宝领取以及拼多多等 API。尽管外面的 API 还有待欠缺,然而基础设施曾经有了,前面就是有条件的往上面堆 API 了。

很多人对淘宝客感兴趣,这个咱们下次再聊;当初咱们以对接微信以及支付宝领取为例子,看看应用这个框架都须要做多少工作吧!

筹备工作

想要对接支付宝、微信,首先咱们须要在对应开放平台中申请所须要的参数。这里不再赘述,间接贴上目前自研平台的领取配置截图:
支付宝

微信

以上就是咱们须要提前准备好的工作。而后咱们须要新建一个工程

cargo new pay_test
而后编辑 Cargo.toml 引入 Labrador 库。
labrador = {version="0.1.0", features=["wechat", "alipay"]}

在 main 文件中,咱们先初始化两个 client。

use labrador::{WeChatPayClient, SimpleStorage, TradeType, WeChatPayRequestV3, Amount, Payer, AlipayTradeWapPayRequest, AlipayClient};
use chrono::{Local, SecondsFormat};

#[tokio::main]
async fn main() {
    // 微信  ↓
    let wechat =  WeChatPayClient::new("appid", "secret", SimpleStorage::new()).key_v3("api_v3_key").private_key("private_key");
    let mut wechat_client = client.wxpay();
    // 采纳 V3 版本的微信对立下单 API
    let result = client.unified_order_v3(TradeType::Jsapi, WeChatPayRequestV3 {appid: "appid".to_string().into(),
        mch_id: "mchid".to_string(),
        description: "测试商品领取".to_string(),
        out_trade_no: "1602920235sdfsdfas32234234".to_string(),
        time_expire: Local::now().to_rfc3339_opts(SecondsFormat::Secs, false),
        attach: None,
        notify_url: "https:xxx.cn/trade/notify".to_string(),
        amount: Amount {
            total: 1,
            currency: String::from("CNY").into(),
            payer_total: None,
            payer_currency: None
        },
        payer: Payer {openid: "oUVZc6S_uGx3bsNPUA-davo4Dt7Us".to_string()
        }.into(),
        detail: None,
        scene_info: None,
        settle_info: None
    });
    match result.await {Ok(res) => {todo!(做一些平凡的事件)
        }
        Err(err) => {todo!(做一些平凡的事件)
        }
    }


    // 支付宝  ↓
    let param = AlipayTradeWapPayRequest::default(); // 申请参数补全
    let alipay_client = AlipayClient::new("appKey", false).set_private_key("private_key")?
        .set_alipay_public_key("alipay_public_key").set_alipay_root_cert("alipay_root_cert").set_app_cert("app_cert");
    match alipay_client.wap_pay("POST".into(), param).await {Ok(res) => {todo!(做一些平凡的事件)
        }
        Err(err) => {todo!(做一些平凡的事件)
        }
    }
    
}

应用下来是不是很不便,基本上与官网统一;另外因为对应 API 太多,如果框架内置的 API 不能满足对应的要求的话,能够间接依据文档内容实现对应的申请 trait,就可能应用对应的 API 了。
而后配套文档也根本都欠缺了,在应用的过程中能够很不便的查看某些办法应用的形式。

测试

测试的话比拟头疼,就只能大家各自玩玩了。,这里提供一个基于 Labrador 的网页领取链接,整体是基于下面的最开始提到的自研平台的领取模块,

目前平台对接了支付宝和微信,如果须要体验的话能够扫描下方进行扫码领取体验,仅供体验请勿理论领取。

写在最初

明天次要是简略介绍一下 Labrador 框架,以及一个简略的应用示例。微信、支付宝生态在其余语言有很多不便的框架,自己也是微信开发者联盟的开发者,之前致力于 Java 模块的 WxJava 进行一些企业微信的 API 集成。

因为技术栈起因,最近几年应用 Rust 进行日常工作开发,这块的生态还有待欠缺,所以决定一点点的欠缺掉,有趣味的敌人能够间接在 crates.io 中或者最大的开源网站某 git 中搜寻Labrador,期待大家 star 以及提交 PR 一起欠缺我的项目。

另外如果有 Java 小伙伴想要转 Rust 岗位,能够举荐应用咱们自研 AkitaORM 框架,该框架语法与MyBatis-Plus 基本一致,所以 Java 小伙伴应用起来应该非常顺畅。

退出移动版