利用 Hapi 框架构建微信支付和退款的实践与心得

微信支付已成为了当前移动支付领域的大佬,各互联网公司和个人开发者都在利用微信支付为自己的产品赋能。Hapi 是 Node.js 生态系统中一款优秀的框架,通过 Hapi 可以快速构建出一个稳定可靠的应用程序。本篇文章将会详细介绍如何利用 Hapi 框架实现微信支付和退款功能,并且涉及到一些具体的实现细节,可以为开发者提供学习和参考价值。

一、微信支付的实现

在实现微信支付前,首先需要了解微信支付的流程。微信支付主要由以下几个环节组成:

  1. 用户在小程序或公众号中发起支付请求。
  2. 小程序或公众号将支付请求发送到商户服务器。
  3. 商户服务器接到支付请求后,按照微信支付开发文档中的要求,构建出支付请求参数并发送给微信支付平台。
  4. 微信支付平台接收到商户的支付请求后,将请求加工并返回给商户服务器二维码链接或 payment_id。
  5. 商户将微信支付的二维码或 payment_id 呈现给用户,用户通过扫码或点击链接进入微信支付页面进行支付。
  6. 用户支付成功后,微信支付平台将支付成功的通知推送给商户服务器。
  7. 商户服务器接收到微信支付平台的通知并返回 success 给微信支付平台,微信支付平台不再推送通知。

在 Hapi 框架下,实现微信支付主要有以下步骤:

1. 实现微信支付相关接口

商户在与微信支付平台协商支付方式并开通商户号后,就可以使用商户号、应用ID、商户密钥等信息调用微信支付平台提供的支付接口,具体的接口和使用方式,参见微信支付官方文档。

在 Hapi 中可以通过定义路由和控制器实现微信支付相关接口,以下以 /wxpay 路径为例:

----- ---- - ----------------------
----- --- - --- -------------
  ----- ------------
  ----- ----
---
-----------
  ------- -------
  ----- ---------
  -------- ----- --------- -- -- -
    -- ---- ------ ---
  -
---

2. 构建微信支付请求参数

商户传递给微信支付平台的请求参数是一个 JSON 格式的对象,需要按照微信支付平台开发文档的要求构建。具体来说,包括以下几个参数:appidmch_idnonce_strsignbodyout_trade_nototal_feespbill_create_ipnotify_urltrade_typeopenid

其中,appid 为商户的应用ID,mch_id 为微信支付服务商的商户号,nonce_str 是一个不重复的随机数,用于防止重放攻击,sign 是一个签名值,用于验证请求数据的完整性和真实性,body 为商品或支付单简要描述,out_trade_no 为商户订单号,total_fee 为订单总金额,spbill_create_ip 为用户IP地址,notify_url 为回调地址,trade_type 为交易类型,openid 为用户的 OpenID。

构建支付请求参数的代码如下:

----- ----------- - -----------------------
----- ------ - ------------------
----- -------- - -------------------------------------------------

-------- ---------- ---- -
  ----- --- - ------------------------------------- ---- -- -
    ------ --- - -----------------------
  -- ----
  ------ ---------------------------------
-

-------- ------------------ -
  ------ ------------------------------------ ----
-

-------- ------------------- -
  ------ -------------- ---------------- - ------
-

-------- --------------------------------- -
  ----- --- - ------------
  ----- --------- - -------------------
  ----- --------- - --------------------
  ----- ---- - -------------
  ----- ------------ - ---------------------
  ----- --------- - ------------------
  ----- ---------------- - -------------------------
  ----- ---------- - -------------------
  ----- ---------- - -------------------
  ----- ------ - ---------------
  ----- ---- - -
    ------ --------------
    ------- ---------------
    ----------
    -----
    -------------
    ----------
    -----------------
    -----------
    -----------
    ------
  --
  --------- - ------------------------------------------ --------------------
  ------ ----------------------------
-

3. 调用微信支付接口

在构建完微信支付的请求参数后,就可以通过调用微信支付接口实现支付功能。以 Hapi 的 request 方法和 axios 库为例:

----- ----- - -----------------
----- ------- - -
  ------ ---------------------
  ------- -------------
  ---------- -----------------------------------
  ---- --------------
  ----- ----------
  ------------- -------------
  ---------- ----
  ----------------- ------------
  ----------- -----------------------------------------
  ----------- --------
  ------- ------------------------------
--
----- ---------------- - ----------------------------------
----- -------- - ----- -------------------- ------------------

4. 处理微信支付的回调通知

微信支付的回调通知是指当用户支付成功后,微信支付平台将支付成功的消息推送给商户服务器,商户服务器需要对消息进行验证和处理。在 Hapi 中,可以通过定义路由和控制器来实现微信支付回调通知的处理:

-----------
  ------- -------
  ----- ----------------
  -------- ----- --------- -- -- -
    -- ---- ----------
  -
---

需要注意的是,在接收到微信支付回调通知后,商户服务器需要返回 success 给微信支付服务器,确保微信支付平台不再推送通知。具体实现代码如下:

-----------
  ------- -------
  ----- ----------------
  -------- ----- --------- -- -- -
    ----- ---------- - ----------------
    ----- ---- - ----------------
    ------ ----------------
    ----- ---------- - ------------------------------------------------ ------------------------------------------
    -- ----------- --- ----- -
      -- ---- ----
      ------ ---------------------------------------------------------------------------------------------------------------------------------------
    - ---- -
      ------ ---------------------------------------------------------------------------------------- -----------------------------------------------------
    -
  -
---

二、微信退款的实现

在实现微信退款前,同样牵涉到退款的流程。微信支付平台提供了以下几个退款接口:

  1. 商户按照微信支付开发文档的要求,将退款请求数据发送至微信支付平台。
  2. 微信支付平台收到请求后,处理并返回结果至商户服务器。
  3. 商户接收到结果后,进行相应的处理。

在 Hapi 框架下,实现微信退款主要有以下步骤:

1. 实现微信退款接口

商户可以按照微信支付开发文档的要求,管理和使用退款接口。在 Hapi 中可以通过定义路由和控制器实现微信退款的接口:

-----------
  ------- -------
  ----- ------------
  -------- ----- --------- -- -- -
    -- ---- -------- ---
  -
---

2. 构建微信退款请求参数

微信退款请求参数同样也是一个 JSON 格式的对象,具体包括以下参数:appidmch_idnonce_strsignout_refund_noout_trade_nototal_feerefund_fee。其中,appidmch_idnonce_strsign 参数都与微信支付参数一致,out_refund_no 为商户生成的退款单号,out_trade_no 为商户交易号,total_fee 为订单总金额,refund_fee 为退款金额。

构建微信退款请求参数的代码如下:

-------- ----------------------------- -
  ----- --- - ------------
  ----- --------- - -------------------
  ----- ------------- - ----------------------
  ----- ------------ - ---------------------
  ----- --------- - ------------------
  ----- ---------- - -------------------
  ----- ---- - -
    ------ --------------
    ------- ---------------
    ----------
    --------------
    -------------
    ----------
    ----------
  --
  --------- - ------------------------------------------ --------------------
  ------ ----------------------------
-

3. 调用微信退款接口

与微信支付相似,调用微信退款接口同样需要发送退款请求数据并处理返回结果。以下以 Hapi 的 request 方法和 axios 库为例:

----- ----- - -----------------
----- ------- - -
  ------ ---------------------
  ------- -------------
  ---------- -----------------------------------
  ---- --------------
  -------------- -------------
  ------------- -------------
  ---------- ----
  ----------- --
--
----- ------------------- - ------------------------------
----- -------- - ----- -------------------- ---------------------

三、总结

通过 Hapi 框架实现微信支付和退款主要分为以下几个步骤:实现微信支付、构建微信支付请求参数、调用微信支付接口、处理微信支付的回调通知、实现微信退款、构建微信退款请求参数、调用微信退款接口。

需要注意的是,微信支付和退款过程中涉及到非常多的细节问题,如微信支付的回调通知的安全性等,开发者在实现功能的过程中,需要认真阅读微信支付官方文档,并且针对特定的业务情况,根据微信支付的要求进行上述流程的实现。

示例代码部分参考自:https://github.com/holdmoon/hapi-wechat-pay/blob/master/lib/index.js。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/652b85c67d4982a6ebd5e09d


猜你喜欢

相关推荐

    暂无文章