Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

面试官:说说微信小程序的支付流程? #17

Open
linwu-hi opened this issue Jul 30, 2023 · 0 comments
Open

面试官:说说微信小程序的支付流程? #17

linwu-hi opened this issue Jul 30, 2023 · 0 comments

Comments

@linwu-hi
Copy link
Owner

面试官:说说微信小程序的支付流程?

一、前言

微信小程序作为一种新型的应用形态,为电商类小程序提供了非常完善、优秀、安全的支付功能。通过调用微信的API,可以实现快捷便捷的支付体验。

场景流程

image

流程大致如下:

  1. 用户通过分享或扫描二维码进入商户小程序,用户选择购买,完成选购流程。
  2. 调起微信支付控件,用户开始输入支付密码。
  3. 密码验证通过,支付成功。商户后台得到支付成功的通知。
  4. 返回商户小程序,显示购买成功。
  5. 微信支付公众号下发支付凭证。

二、详细流程

以电商小程序为例,支付流程图如下:

image

具体操作流程如下:

  1. 打开小程序,点击直接下单。此时,小程序会调用wx.login获取用户临时登录凭证code,然后发送到后端服务器换取openId
  2. 用户下单,小程序需要将购买的商品Id,商品数量,以及用户的openId传送到服务器。
  3. 服务器在接收到商品Id、商品数量、openId后,生成订单数据。同时,通过签名算法,向微信支付发送请求,获取预付单信息(prepay_id)。然后,服务器会将获取的数据再次进行签名,向小程序端响应必要的信息。
  4. 小程序端在获取对应的参数后,调用wx.requestPayment()发起微信支付,唤醒支付工作台,进行支付。
  5. 接下来,用户会进行微信支付密码、指纹等验证。确认支付之后,微信后台进行鉴权,直接返回给前端支付的结果。前端收到返回数据后对支付结果进行展示。
  6. 最后,微信后台在给前端返回支付的结果后,也会向后台返回一个支付结果。后台通过这个支付结果来更新订单的状态。

以下是后端响应数据和wx.requestPayment方法所需要的参数示例:

wx.requestPayment({
  // 时间戳
  timeStamp: '',
  // 随机字符串
  nonceStr: '',
  // 统一下单接口返回的 prepay_id 参数值
  package: '',
  // 签名类型
  signType: '',
  // 签名
  paySign: '',
  // 调用成功回调
  success () {},
  // 失败回调
  fail () {},
  // 接口调用结束回调
  complete () {}
})

参数表如下所示:

三、支付安全

对于支付的安全,微信小程序采用了多重安全措施。首先,微信支付是基于HTTPS传输加密数据,采用安全协议来保证信息传输的安全性。其次,微信支付服务提供了商户证书下发、报文签名以及商户数据包(MD5)校验等多种安全机制来防止信息被篡改。此外,用户的支付信息如银行卡号、密码、验证码等信息均不会保存在商户系统或者微信系统,即使在微信服务器被攻破,也无法获取用户的真实支付信息。最后,微信支付还为用户提供了交易过程中的安全保障,通过多种风险控制系统为用户拦截可疑交易。

四、结束

小程序支付和以往的网页、APP微信支付大同小异,可以说小程序的支付变得更加简洁,不需要设置支付目录、域名授权等操作。其优化了支付流程,同时在安全方面也做出了保障,从而为用户提供了更好的支付体验。

参考文献

@linwu-hi linwu-hi changed the title # 面试官:说说微信小程序的支付流程? 面试官:说说微信小程序的支付流程? Jul 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant