技术分享-商城篇-订单支付微信篇(十二)

B2C商城微信支付全解析:H5支付、小程序支付、JSAPI支付与APP支付

引言

在之前的文章中,我们聊了B2B2C的商城相关功能模块,如:首页布局、商品、购物车、购物结算、订单支付等,但是B2C商城的订单支付方式的选择,我们在国内目前使用最多的就是微信支付和支付宝支付,而随着移动互联网的快速发展,微信支付已成为B2C商城中不可或缺的支付方式之一。本期我们先从微信支付开始聊一下支付业务逻辑、技术架构、注意事项以及数据安全等方向,详细阐述H5支付、小程序支付、JSAPI支付和APP支付在B2C商城中的应用,后期还会对支付宝、云闪付等单开文章进行详述。
微信支付流程图
以上提供一张微信支付流程图,详细接口和对应端,见官方文档

业务逻辑

我们在提交购物结算,生成订单的时候,就需要通过支付接口生成支付链接,相应的步骤如:用户下单、生成支付请求(平台需要自己构造一个商户交易号,便于和微信支付平台做数据匹配,如对账和异步)、获取支付请求URL(小程序、JSAPI以及APP省略,这几个方式都是通过构造支付信息,拉起微信客户端进行支付)、页面跳转(H5)、用户支付(需要当前用户微信openid,注意:微信每一个端openid可能不一致,所以为了确保用户唯一性,微信官方提供了unionid,需要开通微信开放平台,然后把app、微信公众号、小程序等绑定到开放平台即可)、页面支付结果通知(取消或成功,对应跳转不同的地址)、支付状态更新(异步处理,所以需要在支付后台配置支付回调地址,必须),以下把每个支付方式,拆开列出不同步骤,方便各位阅读。

H5支付

H5支付主要适用于在手机浏览器中直接打开的网页支付场景。用户在商城网页中选择商品并完成下单后,通过H5支付页面调用微信支付接口完成支付。其业务逻辑主要包括以下几个步骤:

  1. 用户下单:用户在商城网站选择商品并提交订单。
  2. 生成支付请求:商城后台调用微信支付统一下单接口,获取预支付交易会话标识(prepay_id)。
  3. 页面跳转:将用户重定向到微信支付页面,并传入预支付信息。
  4. 用户支付:用户在微信支付页面输入支付密码完成支付。
  5. 支付结果通知:微信支付服务器异步通知商城后台支付结果。

小程序支付

小程序支付是在微信小程序内部完成的支付方式,具有更好的用户体验和转化率。其业务逻辑主要包括:

  1. 用户下单:用户在小程序内选择商品并提交订单。
  2. 统一下单:小程序后端调用微信支付的统一下单接口,获取prepay_id。
  3. 签名生成:根据prepay_id生成签名,并返回给小程序前端。
  4. 发起支付:小程序前端调用微信支付API,发起支付请求。
  5. 支付结果处理:微信支付服务器异步通知小程序后端支付结果,小程序前端显示支付结果。

JSAPI支付

JSAPI支付是在微信内嵌的网页中完成的支付方式,适用于公众号等场景。其业务逻辑与H5支付类似,但需要在微信内打开网页:

  1. 用户下单:用户在公众号内选择商品并提交订单。
  2. 统一下单:公众号后台调用微信支付的统一下单接口,获取prepay_id。
  3. 页面跳转:公众号将用户引导至支付页面,并传入prepay_id等信息。
  4. 用户支付:用户在支付页面完成支付。
  5. 支付结果通知:微信支付服务器异步通知公众号后台支付结果。

APP支付

APP支付是指用户在手机APP内通过微信SDK调用支付接口完成的支付方式。其业务逻辑主要包括:

  1. 用户下单:用户在APP内选择商品并提交订单。
  2. 统一下单:APP后台调用微信支付的统一下单接口,获取prepay_id。
  3. 生成支付参数:APP后台根据prepay_id生成支付参数。
  4. 发起支付:APP通过微信SDK调用支付接口,展示支付页面给用户。
  5. 用户支付:用户在支付页面完成支付。
  6. 支付结果通知:微信支付服务器异步通知APP后台支付结果。

技术架构

微信支付技术架构

微信支付的技术架构包括前台调用和后台处理两个主要部分。前台调用主要指客户端(iOS、Android、Web等)和服务器之间的数据传输,包括通信协议和数据加密。后台处理主要涉及支付流程和数据的处理,包括订单处理、交易记录查询等。

微信支付采用HTTPS协议进行通信,确保数据在传输过程中的安全和完整性。微信支付采用对称加密和非对称加密相结合的方式进行数据加密,保证数据传输的安全性。同时,微信支付采用云计算架构,确保支付服务的高可用性和效率。

具体实现

  • H5支付和JSAPI支付:通过微信提供的JS API调用支付接口,需要在支付页面中嵌入微信支付相关的JS代码。
  • 小程序支付:基于微信小程序的支付能力,通过小程序的API接口完成支付。
  • APP支付:在APP中集成微信SDK,通过SDK调用支付接口,实现支付功能。

注意事项

  1. 域名备案与安全:所有涉及支付的域名必须经过ICP备案,且配置在微信支付的安全域名列表中。
  2. 商户号与密钥:商户需要申请并配置微信支付商户号和相关密钥,确保支付接口的安全调用。
  3. 支付参数:支付参数的生成和签名必须严格按照微信支付的要求进行,确保支付的安全性和正确性。
  4. 用户授权:在支付过程中,需要确保用户授权,避免未授权支付行为的发生。
  5. 支付结果处理:及时并准确地处理支付结果,确保订单状态的正确更新。

数据安全

订单支付,我们除了实现基本支付逻辑外,还需要对提交给微信等第三方平台数据做相应安全处理,避免被有心人钻空子,给大家来一个零元购,比如我曾经见过一个电商系统,对方的商城没有做对支付金额校验和处理,直接通过前端把支付金额传输过去,后端以裸奔形式完全不对支付金额做校验,导致被人以0.01元的价格,通过抓包接口,通购全站商品,且在最后支付回调也没有对支付金额进行验证(最后这整个团队都被一起撸了,这种低级错误我遇到过不少,都是前后端为了省事,把敏感数据完全暴露给别人,且有前端提交,这种情况接口被抓包暴露之后,就等于给平台炒成不可估量损失等等,还有很多),而要解决以上问题也很简单,我列出几个方案:

  1. CSRF:全称Cross-site request forgery攻击,以每次临时token进行入参,并对token进行效期控制以及使用后过期处理等;
  2. 数据加密:把前端提交的敏感信息通过对称加密或非对称加密方式加密之后传输(对于支付可以使用RSA非对称加密,并动态生成加密密钥),防止同一个公钥被窃取
  3. 敏感信息处理:如:订单信息、支付金额等,交由后端自己取,以订单ID或者订单号[建议使用订单号]
  4. 用户越权:用户越权这个问题也是经常性被忽视,我们在日常开发中,会使用数据ID来入参,但是由数据库生成的自增ID是按序列叠加生成的,所以很多敏感信息就是被这种方式给窃取,解决方式就是:敏感接口若是必须登录后才能操作,后端做好RBAC控制权限,对涉及用户的接口,都必须加入鉴权处理,并在取值时,携带上当前用户ID,就可避免越权事件发生

说了这么多,主要就是强调,系统的安全如同生命一样重要,后面我可能会开单章文章来详细聊一下系统安全这块,聊会正题,我们只需解决自己系统安全问题,其实在微信端,他们安全性做的非常好,我简单列了几个微信支付在数据安全方面保障措施,以供各位参考:

  1. 数据加密:所有敏感数据(如用户信息、支付信息等)在传输过程中均采用SSL/TLS加密技术,确保数据在公网上传输时不会被窃听或篡改。同时,微信支付内部也采用高强度的加密算法对数据进行加密存储,防止数据泄露。

  2. 访问控制:微信支付系统实施严格的访问控制策略,确保只有经过授权的用户或系统才能访问敏感数据和执行关键操作。这包括基于角色的访问控制(RBAC)、基于属性的访问控制(ABAC)等机制,以及多因素认证(MFA)等安全措施。

  3. 安全审计:微信支付系统具备全面的安全审计功能,能够记录并分析所有关键操作和系统事件,以便在发生安全事件时进行追溯和调查。这些审计记录包括登录活动、支付请求、API调用等,有助于及时发现并应对潜在的安全威胁。

  4. 风险评估与监控:微信支付团队定期进行风险评估和监控,通过自动化工具和人工分析相结合的方式,识别并评估潜在的安全风险。一旦发现异常行为或安全漏洞,将立即采取措施进行修复和加固。

  5. 合规性管理:微信支付严格遵守相关法律法规和行业标准,如《网络安全法》、《支付清算管理办法》等,确保业务运营的合规性。同时,微信支付还积极与监管部门沟通合作,共同维护支付市场的健康稳定。

  6. 用户教育与保护:微信支付注重用户教育,通过官方网站、APP推送、客服热线等多种渠道向用户普及支付安全知识,提高用户的安全意识和自我保护能力。同时,微信支付还提供了多种安全措施,如支付密码、指纹识别、面部识别等,确保用户账户和资金的安全。

总结

B2C商城中的微信支付方式多样,包括H5支付、小程序支付、JSAPI支付和APP支付等,每种方式都有其独特的业务逻辑和技术实现。在使用微信支付时,需要从业务逻辑、技术架构、注意事项和数据安全等多个方面进行综合考虑和规划。通过合理的系统设计和严格的安全措施,可以确保微信支付在B2C商城中的稳定、高效和安全运行。同时,商户和用户也需要提高安全意识,共同维护支付环境的安全稳定。第三方支付,不论是微信支付、支付宝支付还是其他什么支付,只要学会其中一个,其他平台的支付对接都是大同小异,都可以触类旁通,本篇内容就暂时聊到这儿,若有疑问可以字评论区@我或者私聊本人也可,感谢大家阅读,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403982.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】Centos系统没有Vpn时候安装Docker

【Docker】没有Vpn时候安装Docker 背景1.安装docker之前先卸载2.基础配置3.安装docker5. 问题解决6.配置docker镜像源,解决网络超时 背景 工作中习惯VPN或者服务器节点为国外或者香港节点,最近买了一台国内服务器网络受到各种限制。 1.安装docker之前先…

uniapp/vue个性化单选、复选组件

个性化单选和复选组件在网页设计中非常常见,它们不仅能够提升用户界面的美观度,还能改善用户体验。此组件是使用vue uniapp实现的个性化单选复选组件。设计完成后,点击生成源码即可。 拖动组件过设计区 每行显示数量 默认支持每行三个&#…

扎心“我学了六个月 Python,怎么还是会找不到工作”

前言 👉 小编已经为大家准备好了完整的代码和完整的Python学习资料,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】 在编程界,Python是一种神奇的存在。有人认为,只有用Python才能优雅写代码…

等保测评中的安全需求分析:构建精准的信息安全防护体系

在数字化转型的时代背景下,信息安全成为企业发展的关键因素之一。等保测评,作为我国信息安全等级保护制度的重要组成部分,要求企业进行详细的安全需求分析,以构建精准、有效的信息安全防护体系。本文旨在探讨等保测评中的安全需求…

ThreeJs学习笔记--坐标系,光源,相机控件

坐标系 一、创建添加坐标系 给场景添加坐标系THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸 const axesHelper new THREE.AxesHelper(200)//数值是坐标的尺寸 scene.add(axesHelper)//添加到场景里 坐标系包含三个坐标轴&…

本地ComfyUI安装全记录

资料 先看我写的stable diffusion全记录 ComfyUI 完全入门:安装部署 ComfyUI 完全入门:图生视频 ComfyUI【强烈推荐】 秋葉aaaki comfy UI整合包 可以使用stable diffusion的大模型,通过修改文件重新指向 修改路径即可 下载秋叶大佬的…

python之matplotlib (3 坐标轴设置)

写在前面 在说明坐标轴设置之前,我有必要和大家说清楚图像设置的一些方法,避免陷入困扰模糊的地步。前面我们说过,画图的三种方法(python之matplotlib (1 介绍及基本用法)-CSDN博客)。而设置也…

yolov8目标检测与速度估计

我们可能都见过限速路牌。我们中的一些人甚至可能收到过通过邮寄或电子邮件发送的自动限速违规通知。人工智能(AI)交通管理系统可以利用计算机视觉技术自动标记超速违规行为。路灯和高速公路上的摄像头拍摄的实时画面可用于估算车速和加强道路安全。 车速…

博世(BOSCH)× Milvus:智能驾驶领域的数据挖掘革新

01.博世智能驾控:智能驾驶技术的领航者 博世(BOSCH)智能驾控是全球汽车技术领域的领导者,以其在自动驾驶技术上的创新和深厚历史而闻名。博世的自动驾驶解决方案,包括先进的驾驶辅助系统(ADAS)…

【数据结构与算法】归并排序

归并排序目录 一.归并排序的原理二.有序的归并实现三.无序的归并实现(分治法)四.归并排序的实现五.完整代码 一.归并排序的原理 如何将这两个数组排序? 二.有序的归并实现 将一个数组分为两段,那边的值小就加入到新数组中,直到一边已经加完了. 有一种情况就是一边已经加入…

骑行耳机哪个牌子好用?选购骑行耳机需要注意的五大选购陷阱!

作为一名有着多年骑行经验的专业评测师,对骑行装备已经有着超过五年的研究,骑行耳机也不例外,期间也是亲身测试了数十款骨传导耳机,可以说骑行耳机是专为骑行爱好者设计的,不需要入耳佩戴,而且佩戴舒服&…

基于云快充协议1.5-1.6版本的充电桩系统软件-充电桩系统 -新能源车充电平台源码

介绍 SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码 充电桩平台充电桩系统充电桩小程序充电桩管理系统充电桩项目充电桩协议充电桩微信小程序S…

鸿蒙开发入门day10-组件导航

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 组件导航 (Navigation) 设置页面显示模式 设置标题栏模式 设置菜…

整数分解5.3.2

题 前面写过逆序的 最后一个数后面不要有空格 #include <stdio.h>int main() {int x;scanf("%d",&x);int d;do{dx%10;printf("%d",d);if(x>10){printf(" ");}x/10;}while(x>0);printf("\n");return 0; } 现在这个是…

Linux网络:基于OS的网络架构

Linux网络&#xff1a;OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统&#xff0c;讲解计算机网络的设计理念&#xff0c;帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…

Positional Encoding | 位置编码【详解】

文章目录 1、位置编码的2种方案2、位置编码3、公式详解 &#xff1a; 绝对位置 、 相对位置4、代码4.1 代码14.2 代码2 1、位置编码的2种方案 transformer的作者刚开始说固定的位置编码和可学习的位置编码的效果是差不多的&#xff0c;后来证明可学习的位置编码没有太大的必要&…

系统工程与信息系统(上)

系统工程 概念 【系统工程】是一种组织管理技术。 【系统工程】是为了最好的实现系统的目的&#xff0c;对系统的组成要素、组织结构、信息流、控制机构进行分析研究的科学方法。 【系统工程】从整体出发、从系统观念出发&#xff0c;以求【整体最优】 【系统工程】利用计算机…

Oracle 12.2集群搭建遇到ORA-ORA-15227,ORA-15031,ORA-15018问题处理

报错&#xff1a; [FATAL] [DBT-30056] Labeling of disks failed. ORA-15227: could not perform label set/clear operation ORA-15031: disk specification /dev/asmdisk/ocr01 matches no disks [FATAL] [DBT-30002] Disk group OCR creation failed. ORA-15018: diskgrou…

(javaweb)SpringBootWeb案例(毕业设计)案例--部门管理

目录 1.准备工作 2.部门管理--查询功能 3.前后端联调 3.部门管理--新增功能 1.准备工作 mapper数据访问层相当于dao层 根据页面原型和需求分析出接口文档--前后端必须遵循这种规范 大部分情况下 接口文档由后端人员来编写 前后端进行交互基于restful风格接口 http的请求方式…

K8s部署安装

一.K8s简介 Kubernetes&#xff08;通常缩写为K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、扩展和管理。它最初由Google开发&#xff0c;现在由云原生计算基金会&#xff08;CNCF&#xff09;维护。Kubernetes 的核心目标是提供一个一致…