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

🎉🎉欢迎来到我的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;打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

orangepi 3b安装 miniconda,后安装 opencv-python

参考 https://docs.conda.io/projects/miniconda/en/latest/ 下载miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-Linux-aarch64.sh -O ~/miniconda3/miniconda.sh mkdir -p ~/miniconda3 #wget https://repo.anaconda.com/miniconda/Mi…

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 其它的方法我遇见了再补充

easycode 插件配置文件

easycode是一个idea生成文件的插件&#xff0c;以下是我的一个项目中配置信息&#xff0c;需要的可以拿走&#xff0c;保存成json文件导入即可 {"author" : "XXX","version" : "1.2.8","userSecure" : "","…

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

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

spark解决scala.matchError问题

在代码里处理match问题的时候报scala.matchError问题 处理方式很简单 我们在做match{case }的时候&#xff0c;有时候会忽略需要加一个总管所有未匹配上的情况&#xff0c;也就是缺少 case _ > … 这样的条件&#xff0c;加上就好了&#xff0c;基本用不到这一层&#xff0c…

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

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

面试题:Docker命令大全及相关技术名词

Docker相关技术名词&#xff1a; 镜像&#xff08;Image&#xff09;&#xff1a;Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起&#xff0c;称为镜像。 容器&#xff08;Container&#xff09;&#xff1a;镜像中的应用程序运行后形成的进程就是容器…

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

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

【C++】知识点汇总(下)

C知识点复习下 一、面向对象编程&#xff1a;深入理解类与对象1.类的定义和访问2.this指针3.构造函数与析构函数4.重载和拷贝构造函数5.常成员和静态成员6.友元 二、运算符重载1. 规则2. 成员或友元重载2.1 例子&#xff1a;成员函数重载2.2 例子&#xff1a;友元函数重载 3. 类…

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接口自身的强…

网站报错:nginx 413 Request Entity Too Large

问题描述 我在上传一个图片文件的时候&#xff0c;收到 Nginx 报错&#xff1a; 413 Request Entity Too Large 问题原因 Nginx 默认上传文件大小是 1 MB&#xff0c;如果上传过大文件&#xff0c;会报上面的错误。 解决方法 需要修改nginx的配置文件。以下是如何修改的步…

c++牛客总结

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

【QT】return 和 break 是 C++ 中两个不同的关键字,它们在程序中有不同的用途。

return 和 break &#xff1a; return&#xff1a; 用于从函数中返回值&#xff0c;结束函数的执行&#xff0c;并将控制返回到调用函数的地方。在函数体中&#xff0c;当执行到 return 语句时&#xff0c;函数将立即退出&#xff0c;不再执行后续的语句。可以带有一个值&#…

2024年软考什么时候报名?一年考几次?

2024年上半年报名时间预计在3月中上旬开始&#xff0c;考试时间预计为5月25日。 报考条件及报名流程 报考条件&#xff1a; 1.遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术应用能力的人员&#xff0c;均可根据本人情况报名参加…

【学生特惠|权威主办】2024年地理科学与遥感技术国际学术会议(ICGSRST 2024)

【学生特惠|权威主办】2024年地理科学与遥感技术国际学术会议(ICGSRST 2024) 2024 International Conference Geographic Science and Remote Sensing Technology(ICGSRST 2024) 一、【会议简介】 我们非常荣幸地邀请您参加2024年地理科学与遥感技术国际学术会议&#xff08;I…