• 推荐一个好用的微信、支付宝等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!(做一些伟大的事情)
            }
        }
        
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    使用下来是不是很方便,基本上与官方一致;另外由于对应API太多,如果框架内置的API不能满足对应的要求的话,可以直接根据文档内容实现对应的请求trait,就能够使用对应的API了。
    然后配套文档也基本都完善了,在使用的过程中可以很方便的查看某些方法使用的方式。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7m8U3yV1-1660730934779)(/img/bVc1NDp)]

    测试

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

    目前平台对接了支付宝和微信,如果需要体验的话可以扫描下方进行扫码支付体验,仅供体验请勿实际支付。
    测试

    写在最后

    今天主要是简单介绍一下Labrador框架,以及一个简单的使用示例。微信、支付宝生态在其他语言有很多方便的框架,本人也是微信开发者联盟的开发者,之前致力于Java模块的WxJava进行一些企业微信的API集成。

    由于技术栈原因,最近几年使用Rust进行日常工作开发,这块的生态还有待完善,所以决定一点点的完善掉,有兴趣的朋友可以直接在crates.io中或者最大的开源网站某git中搜索Labrador,期待大家star以及提交PR一起完善项目。

    另外如果有Java小伙伴想要转Rust岗位,可以推荐使用我们自研AkitaORM框架,该框架语法与MyBatis-Plus基本一致,所以Java小伙伴使用起来应该十分顺畅。

  • 相关阅读:
    delphi操作json
    14 C++ 二叉树创建 1 头文件 The binary tree creates1 header file
    探花交友_第1章_项目介绍以及实现登录功能_第3节_实现登录功能
    分享云安全实践,透视2022亚马逊云科技re:Inforce全球安全大会
    【动态规划】爬楼梯爬的不仅仅是楼梯
    c++day6
    cp -r, 保留拷贝的文件原本的权限和属性
    动态数据增强及构造方案解决
    SQL WHERE Clause(查询子句)
    经典面试题-lock与synchronized异同点
  • 原文地址:https://blog.csdn.net/vaelongchen/article/details/126391685