【电商项目实战】沙箱支付模拟支付功能

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的专栏《电商项目实战》。🎯🎯

👉点击这里,就可以查看我的主页啦!👇👇

Java方文山的个人主页

🎁如果感觉还不错的话请给我点赞吧!🎁🎁

💖期待你的加入,一起学习,一起进步!💖💖

请添加图片描述

 一、沙箱支付

1.什么是沙箱支付

支付宝沙箱支付(Alipay Sandbox Payment)是支付宝提供的一个模拟支付环境,用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户,而沙箱环境则提供了一个安全、隔离的环境,使开发者能够模拟支付过程,测试支付功能,而不会使用真实资金。

使用支付宝沙箱支付环境,开发者可以模拟各种支付场景,包括交易创建、支付请求、支付回调等,以验证支付功能的正确性和稳定性。沙箱环境中的所有交易和数据都是虚拟的,不会产生真实的交易或资金流动。

支付宝沙箱支付提供了开发者工具和接口,使开发者能够在模拟环境下进行支付流程的调试和测试。开发者可以在沙箱环境中创建测试账户、配置模拟的交易金额和状态,使用沙箱环境中的接口进行支付操作,并模拟支付回调接口接收支付结果。

通过使用支付宝沙箱支付,开发者可以更安全、更有效地进行支付功能的开发和测试,避免了对真实环境的影响和风险。一旦支付功能在沙箱环境中验证通过,开发者可以将其部署到真实的支付宝生产环境中,与真实用户进行交互和支付。

2.配置沙箱支付

2.1.接入支付宝开放平台

登陆支付宝:支付宝开放平台

点击登录按钮之后,使用手机的支付宝进行二维码扫码登录,如下:

登录成功之后,点击控制台跳转到控制台主页面,将浏览器进度条滚动到最下面,选择沙箱,最后点击沙箱选项即可,如下:

2.2.下载

下载安装支付宝开放平台开发助手:小程序文档 - 支付宝文档中心

注意:请不要安装在含有空格的目录路径下,否则会导致公私钥乱码的问题

安装完成之后,点击“支付宝开放平台开发助手”开始生成密钥。

2.3.配置秘钥

打开支付宝开放平台开发助手,如下:

选择密钥方式,选择RSA2方式,最后点击生成密钥即可生成得到私钥和公钥。

2.4.生成支付宝公钥

根据支付宝开放平台开发助手生成的应用公钥,生成支付宝公钥:

找到支付宝开放平台的沙箱应用一栏,选择“开发信息”接口加签方式中的自定义密钥方式,点击设置并查看按钮:

生成支付宝公钥,如下:

2.5.配置沙箱账号(买家)

配置沙箱账号(买家)并完成手动充值:登录 - 支付宝

2.6.下载沙箱支付宝

下载沙箱支付宝(只支持安卓):登录 - 支付宝

IOS系统不能下载也没关系可以使用账户密码进行登录付款 

二、开发接入

在 Alipay Easy SDK 中,API 的引用路径遵循如下命名规范:

Factory.能力类别.场景类别.接口方法名称( ... )

注意:不同语言连接符可能不一致,以各语言示例为准。

Alipay Easy SDK API 总览

能力类别

场景类别

接口方法名称

Base(基础能力)

OAuth(用户授权)

getToken(获取授权访问令牌和用户 user_id)

Base(基础能力)

OAuth(用户授权)

refreshToken(刷新授权访问令牌)

Base(基础能力)

Qrcode(小程序二维码)

create(创建小程序二维码)

Base(基础能力)

Image(图片)

upload(上传门店照片)

Base(基础能力)

Video(视频)

upload(上传门店视频)

Member(会员能力)

Identification(支付宝身份认证)

init(身份认证初始化)

Member(会员能力)

Identification(支付宝身份认证)

certify(生成认证链接)

Member(会员能力)

Identification(支付宝身份认证)

query(身份认证记录查询)

Payment(支付能力)

Common(通用)

create(创建交易)

Payment(支付能力)

Common(通用)

query(查询交易)

Payment(支付能力)

Common(通用)

refund(交易退款)

Payment(支付能力)

Common(通用)

close(关闭交易)

Payment(支付能力)

Common(通用)

cancel(撤销交易)

Payment(支付能力)

Common(通用)

queryRefund(交易退款查询)

Payment(支付能力)

Common(通用)

downloadBill(查询对账单下载地址)

Payment(支付能力)

Common(通用)

verifyNotify(异步通知验签)

Payment(支付能力)

Huabei(花呗分期)

create(创建花呗分期交易)

Payment(支付能力)

FaceToFace(当面付)

pay(扫用户出示的付款码,完成付款)

Payment(支付能力)

FaceToFace(当面付)

precreate(生成交易付款码,待用户扫码付款)

Payment(支付能力)

App(手机APP)

pay(生成订单串,再使用客户端 SDK 凭此串唤起支付宝收银台)

Payment(支付能力)

Page(电脑网站)

pay(生成交易表单,渲染后自动跳转支付宝网站引导用户完成支付)

Payment(支付能力)

Wap(手机网站)

pay(生成交易表单,渲染后自动跳转支付宝网站引导用户完成支付)

Security(安全能力)

TextRisk(文本内容安全)

detect(检测内容风险)

Marketing(营销能力)

Pass(支付宝卡包)

createTemplate(卡券模板创建)

Marketing(营销能力)

Pass(支付宝卡包)

updateTemplate(卡券模板更新)

Marketing(营销能力)

Pass(支付宝卡包)

addInstance(卡券实例发放)

Marketing(营销能力)

Pass(支付宝卡包)

updateInstance(卡券实例更新)

Marketing(营销能力)

TemplateMessage(小程序模板消息)

send(发送模板消息)

Marketing(营销能力)

OpenLife(生活号)

createImageTextContent(创建图文消息内容)

Marketing(营销能力)

OpenLife(生活号)

modifyImageTextContent(更新图文消息内容)

Marketing(营销能力)

OpenLife(生活号)

sendText(群发本文消息)

Marketing(营销能力)

OpenLife(生活号)

sendImageText(群发图文消息)

Marketing(营销能力)

OpenLife(生活号)

sendSingleMessage(单发模板消息)

Marketing(营销能力)

OpenLife(生活号)

recallMessage(生活号消息撤回)

Marketing(营销能力)

OpenLife(生活号)

setIndustry(模板消息行业设置)

Marketing(营销能力)

OpenLife(生活号)

getIndustry(生活号查询行业设置)

Util(辅助工具)

AES(加解密)

decrypt(解密,常用于会员手机号解密)

Util(辅助工具)

AES(加解密)

encrypt(加密)

Util(辅助工具)

Generic(通用接口)

execute(自行拼接参数,执行OpenAPI调用)

Util(辅助工具)

Generic(通用接口)

sdkExecute(自行拼接参数,生成加签串,功能等同于通用版 SDK 中的 sdkExecute 方法)

注意:各个API的详细参数说明可查看《Alipay Easy SDK API Doc》  

1.配置依赖

<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId><version>2.0.1</version>
</dependency>

2.配置AlipayConfig

开发文档:小程序文档 - 支付宝文档中心

第一步:修改沙箱支付配置参数:

private Config aliconfig(){Config config=new Config();//沙箱支付宝地址config.gatewayHost="openapi-sandbox.dl.alipaydev.com";//协议httpsconfig.protocol="https";//应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号config.appId="请填写您的AppId,例如:2019091767145019";//支付宝公钥config.alipayPublicKey="请填写支付宝公钥";//签名方式config.signType="RSA2";//商户私钥(应用私钥),您的PKCS8格式RSA2私钥config.merchantPrivateKey="请填写商户私钥(应用私钥),您的PKCS8格式RSA2私钥";return config;
}

注意:这里沙箱支付宝地址有巨坑,由于支付宝沙箱已经全面升级了,导致接口文档与实际的案例接口不匹配,从而影响了以前的老接口的使用,只需要调整接口地址接口,如下:

//沙箱支付宝老地址
config.gatewayHost="openapi.alipaydev.com";
//沙箱支付宝新地址
config.gatewayHost="openapi-sandbox.dl.alipaydev.com";

第二步:修改沙箱支付的支付方式,改成网页支付:

// 2. 发起API调用
// (subject商品标题、outTradeNo订单编号、totalAmount总金额、returnUrl异步通知地址)
AlipayTradePagePayResponse response = Factory.Payment.Page().pay(orderVo.getOid()+"",orderVo.getOid()+"",orderVo.getTotal().toString(),"http://localhost:8081/page/ok.html");

整体代码:

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import com.zking.starshop.pojo.Order;
import org.springframework.stereotype.Component;@Component
public class AlipayConfig {private Config aliconfig() {Config config = new Config();//沙箱支付宝地址config.gatewayHost = "openapi-sandbox.dl.alipaydev.com";//协议httpsconfig.protocol = "https";//应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号config.appId = "";//支付宝公钥config.alipayPublicKey =""//签名方式config.signType = "RSA2";//商户私钥(应用私钥),您的PKCS8格式RSA2私钥config.merchantPrivateKey ="";return config;}public String goAlipay(Order order) {try {// 1. 设置参数(全局只需设置一次)Factory.setOptions(aliconfig());// 2. 发起API调用(subject商品标题、outTradeNo订单编号、totalAmount总金额、returnUrl异步通知地址)AlipayTradePagePayResponse response = Factory.Payment.Page().pay("商城项目收款",order.getOid().toString(),order.getTotal().toString(),//支付成功之后的异步通知(跳出到自己系统的哪个位置)"http://localhost:8080/order/payDone");return response.body;} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}}

 

3.编写回显前端js处理 

 我们在确认订单后需要再向用户确认一遍是否现在支付,回显的时候我们将oid也就是订单id带到前端中去,方便后续操作。

//订单确认回显
return JsonResponseBody.success(oid);//订单确认请求及回显处理$.post('/order/addOrder',order,resp=>{if(resp.code===200){let boolen= confirm("是否现在付款")if(boolen){location.href="http://localhost:8080/order/goPay?oid="+resp.data}else {location.href="http://localhost:8080/order/getCart"}}},'json')

如果我们用户不选择现在支付就跳转订单页面,如果确认支付就调用沙箱支付的接口

 

4.完成沙箱支付 

    //接收oid并将oid传到沙箱支付接口中@RequestMapping("/goPay")@ResponseBodypublic String goPay(HttpServletRequest request) {String oid = (String )request.getAttribute("oid");Order order = orderService.getById(oid);return new AlipayConfig().goAlipay(order);}//支付完成回显方法——用于修改订单状态@RequestMapping("/payDone")@ResponseBodypublic String payDone(@RequestParam Map<String, String> ms) throws Exception {Boolean f = Factory.Payment.Common().verifyNotify(ms);System.out.println(f);String oid = ms.get("out_trade_no");//修改订单状态orderService.update(new UpdateWrapper<Order>().eq("oid", oid).set("status", 1).set("pay_date", new Date()));//将缓存中的订单删除redisService.deleteOder(oid);return "<script>\n" +"    alert('支付成功')\n" +"    location.href = '/'\n" +"</script>";}

 

5.流程演示

①结算购物车商品

②订单确认页面

③确认订单后提示是否现在支付

 ④点击确定跳转支付宝页面进行账户登录

 ⑤登陆成功输入支付密码进行付款

⑥付款成功跳转回调路径进行相应的订单操作 

 

请添加图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!

💖如果觉得有用的话还请点个赞吧 💖

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

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

相关文章

芯片SIC8833可开发打气泵方案

无线车载打气泵方案由一块PCBA板集成其所需的功能&#xff0c;其充气原理是发动机通过两根三角带驱动气泵曲轴&#xff0c;进而驱动活塞进行打气&#xff0c;打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

ClickHouse基础知识(四):ClickHouse 引擎详解

1. 表引擎的使用 表引擎是 ClickHouse 的一大特色。可以说&#xff0c; 表引擎决定了如何存储表的数据。包括&#xff1a; ➢ 数据的存储方式和位置&#xff0c;写到哪里以及从哪里读取数据。 默认存放在/var/lib/clickhouse/data ➢ 支持哪些查询以及如何支持。 ➢ 并发数…

6.vue学习笔记(style绑定+监听器+表单的输入绑定)

文章目录 1.style绑定2.监听器3.表单的输入绑定3.1.复选框3.2.修饰符3.2.1 .lazy 1.style绑定 数据绑定的一个常见需求场景是操纵元素的 CSS style列表&#xff0c;因为style是attribute&#xff0c;我们可以和其他attribute一样使用v-bind将它们和动态字符串绑定。 但是&…

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …

深度学习基础知识神经网络

神经网络 1. 感知机 感知机&#xff08;Perceptron&#xff09;是 Frank Rosenblatt 在1957年提出的概念&#xff0c;其结构与MP模型类似&#xff0c;一般被视为最简单的人工神经网络&#xff0c;也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络&#xff0c…

ModuleNotFoundError: No module named ‘numpy.testing.decorators‘

文章目录 报错信息报错原因解决方案 关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或➕v&#xff1a;codebiubiubiu滴滴我 报错信息 ModuleNotFoundError: No module named numpy.testing.decorators 报错原因 新版本已经去…

how2heap-2.23-03-fastbin_dup_consolidate

#include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h>int main() {void* p1 malloc(0x10);strcpy(p1, "AAAAAAAA");void* p2 malloc(0x10);strcpy(p2, "BBBBBBBB");fprintf(stderr, "申请两个…

手机怎么边看视频边记笔记或备忘录?

在这个信息爆炸的时代&#xff0c;我们经常需要通过看培训视频、听网课来不断充实自己。但是&#xff0c;手机屏幕那么小&#xff0c;如何才能在做笔记的同时&#xff0c;又不错过视频的每一个细节呢&#xff1f; 以前&#xff0c;我总是为此头疼。一手拿着手机看视频&#xf…

【嵌入式】About USB Powering

https://www.embedded.com/usb-type-c-and-power-delivery-101-power-delivery-protocol/https://www.embedded.com/usb-type-c-and-power-delivery-101-power-delivery-protocol/ Type-C接口有多强&#xff1f;PD协议又是什么&#xff1f;-电子发烧友网由于Type-C接口自身的强…

c++牛客总结

一、c/c语言基础 1、基础 1、指针和引用的区别 指针是一个新的变量&#xff0c;指向另一个变量的地址&#xff0c;我们可以通过这个地址来修改该另一个变量&#xff1b; 引用是一个别名&#xff0c;对引用的操作就是对变量本身进行操作&#xff1b;指针可以有多级 引用只有一…

Linux Perf 介绍

文章目录 前言 二、安装Perf三、二级命令3.1 perf list3.2 perf record/report3.3 perf stat3.4 perf top 四、使用火焰图进行性能分析4.1 下载火焰图可视化生成器4.2 使用perf采集数据4.3 生成火焰图参考资料 前言 perf是一款Linux性能分析工具&#xff0c;内置在Linux内核的…

virtualbox新建Ubuntu虚拟机

1、下载virtualbox 2、下载Ubuntu镜像 https://ubuntu.com/blog/desktop virtualbox安装好后&#xff0c;点击新建 选择linux类型 选择内存2~4G都行 选择先不添加虚拟硬盘 创建硬盘&#xff0c;管理点击虚拟介质管理 点击创建&#xff0c;选择创建类型为vmdk&#xff0…

xshell配色

xshell-设置命令行提示符&配色方案 更换配色&#xff1a; Protect Eyes.xcs [Protect Eyes] text00ff40 cyan(bold)93a1a1 text(bold)839496 magentadd3682 green80ff80 green(bold)859900 background042028 cyan2aa198 red(bold)cb4b16 yellowb58900 magenta(bold)6c71c…

腾讯云Centos9使用docker的方式安装APISIX

在虚拟机中安装Docker、Docker-compose 安装Docker 清除旧版本的docker yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装docker的依赖 yum install -y yum-utils device-ma…

腾讯云域名外部入库流程

注册商是腾讯云&#xff0c;且在腾讯云管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是腾讯云但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录腾讯云获取账号ID信息。…

CCF-B类 | 持续中科院1区TOP,Elsevier出版社,50年老刊!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是一本Elsevier旗下&#xff0c;CCF-B类&#xff0c;影响因子为8.0的中科院1区TOP。其详情如下&#xff1a; 期刊简介 PATTERN RECOGNITION ISSN&#xff1a;0031-3203 E-ISSN&#xff1a;1873-5142 IF&#xff08;20…

使用Go语言编写高效的HTTP服务器

随着互联网的快速发展&#xff0c;HTTP服务器在Web开发中扮演着越来越重要的角色。而Go语言作为一种高效、并发性强的编程语言&#xff0c;为编写高性能的HTTP服务器提供了强大的支持。本文将探讨如何使用Go语言编写高效的HTTP服务器。 首先&#xff0c;我们需要了解Go语言的H…

ChatGPT学习笔记——大模型基础理论体系

1、ChatGPT的背景与意义 近期,ChatGPT表现出了非常惊艳的语言理解、生成、知识推理能力, 它可以极好的理解用户意图,真正做到多轮沟通,并且回答内容完整、重点清晰、有概括、有条理。 ChatGPT 是继数据库和搜索引擎之后的全新一代的 “知识表示和调用方式”如下表所示。 …

看板表格样式,去掉element表格背景

<div class"ml-20"><el-input v-model.trim"queryParams.wipOrderNo" size"small" clearable style"width:150px" placeholder"请输入工单号" /><el-select class"ml-20" v-model"queryParam…