Java如何在沙箱环境中测试支付宝支付接口
作者:killerwemotion 发布时间:2023-11-02 14:55:15
标签:Java,支付宝,支付接口
java沙箱环境测试支付宝支付接口?
准备工作,登陆支付宝开放平台,进入沙箱环境
开放平台链接:https://developers.alipay.com/platform/developerIndex.htm
沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr
下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,应用私钥.应用私钥自己保存,应用公钥应该到支付宝的开放平台上生成相应的支付宝公钥才可以正常使用.
沙箱工具中点击设置
将RSA生成的应用公钥,复制到下面的文本框中,点击保存设置
保存好
上述操作完成后,即可进行代码的编写.
进入开发工具编写代码
创建配置类,用作初始化配置
public class AlipayConfig {
// 应用ID,支付宝提供的APPID,上面截图中有提到
public static String app_id = "2016101200670453";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "这里写入上面生成的**应用私钥**";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/appDaily.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "注意是上面再三提示的支付宝公钥";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问.如果只是测试使用,那么设置成自己项目启动后可以访问到的一个路径,作为支付宝发送通知的路径(有什么用暂时没发现)
public static String notify_url = "http://localhost:8080/pay/alipay-callback-notify-url";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问.如果只是测试使用,那么设置成自己项目启动后可以访问到的一个路径.是支付正常完成后,会访问的路径.
public static String return_url = "http://localhost:8080/pay/alipay-callback-return-sult";
// 签名方式,注意这里,如果步骤设置的是RSA则用RSA,如果按照扇面步骤做的话,选择RSA2
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "utf-8";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}
导入Maven坐标
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.4.ALL</version>
</dependency>
创建配置类,用作初始化配置
写Controller类供前台访问,去调用支付接口.
@RequestMapping("/toPay")//设置请求的路径
@ResponseBody//记得加上,否则无法正常调用
public String toPay(String id,String sumMoney) throws Exception{
byte[] serialize = SerializeUtil.serialize(orderIds);
redisServer.setCacheValueForTime(uuid,serialize,1000*60*60*30);
//获得初始化的AlipayClient,将上面创建的配置类中的变量设置到该对象中
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//设置请求参数,并把配置类中的两个路径设置进去
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//如果想正常调用接口则需要传一些必要参数,out_trade_no:订单号,保证唯一性,支付宝根据该参数生成你的支付单号,total_amount:需要支付的金额,注意是String型,且金额计数的分割","不能存在(例如1,000就是错误的参数),subject:对物品进行描述,product_code:是支付类型.更多详细的参数信息参考链接: [https://docs.open.alipay.com/api_1/alipay.trade.page.pay](https://docs.open.alipay.com/api_1/alipay.trade.page.pay)
try {
alipayRequest.setBizContent("{\"out_trade_no\":\""+id +"\","
+ "\"total_amount\":\""+sumMoney +"\","
+ "\"subject\":\""+ "测试支付" +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求
String result;
//发送请求并返回
result = alipayClient.pageExecute(alipayRequest).getBody();
//System.out.println("*********************\n返回结果为:"+result);
return result;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
这是配置类中设置的跳转路径,可自行编写业务
@RequestMapping("alipay-callback-return-sult")
public String successResult(HttpServletRequest request, HttpServletResponse response){
//可以根据request.getParameterMap()获得到调用接口时传递的一些参数去做后续的业务处理
Map<String, String[]> parameterMap = request.getParameterMap();
String[] out_trade_nos = parameterMap.get("out_trade_no");
String id = out_trade_nos[0];
//跳转到其他页面或重定向到其他方法
return "redirect:/good/toPayFor";
}
@RequestMapping("alipay-callback-notify-url")
public String failResult(HttpServletRequest request, HttpServletResponse response){
Map<String, String[]> parameterMap = request.getParameterMap();
String[] out_trade_nos = parameterMap.get("out_trade_no");
String uuid = out_trade_nos[0];
orderService.updateOrderInfo(uuid);
return "redirect:/good/toPayFor";
}
运行项目,发送请求.跳转到如下路径代表成功.
结果展示
来源:https://blog.csdn.net/killerwemotion/article/details/102587412


猜你喜欢
- GitHub 地址:quickjs-android-wrapper特性支持 Java 和 JavaScript 类型互转支持 Promise
- 这里记录Java中从控制台读入信息的几种方式,已备后查!(1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法)public
- 这个导出网站功能指通过前台javascript触发进入ashx函数中,实现将服务器中某个文件夹(包含其子文件夹和文件)通通复制到服务器中另一
- 前言本文告诉大家一些 ValueTuple 的原理,避免在使用出现和期望不相同的值。ValueTuple 是 C# 7 的语法糖,如果使用的
- 呐呐呐,做Java呢,最重要是要把自己的“作品” 部署到公网上去啦。特别是初学者,需要向面试官证明自己会什么,这个真的就很重要啦,空口无凭,
- 1、redis的几种常见客户端:Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持;Redisson:实现了
- NoHttp是专门做Android网络请求与下载的框架,NoHttp基本使用方法如下本文demo源码下载地址: http://xiazai.
- Android中实现全屏、无标题栏的两种办法,另附Android系统自带样式的解释实现全屏无标题栏:1.在xml文件中进行配置 Androi
- 泛型中 T 类型变量 和 ? 通配符 区别定义不同 :T 是类型变量,? 是通配符使用范围不同:? 通配符用作 参数类型、字段类型、局部变量
- springboot 中各种配置项纪录1. @Value最早获取配置文件中的配置的时候,使用的就是这个注解,SpEL表达式语言。// 使用起
- 前言有时候我们在项目中,会用到一些本地 jar 包文件,比如隔壁公司自己打包的;此时无法从maven远程仓库拉取;那么我们可以考虑把 jar
- 一般使用@RequestBody接收的时候报400都是传入的json字符串和对应封装的对象不对应造成的首先要注意封装的对象中的字段类型有没有
- 一、前端搭建1、前端用到js:uploadify(下载地址:http://www.uploadify.com/download/)、laye
- 当我们在windows系统下安装完jdk时,测试案例HelloWorld;运行java命令时报错:找不到或无法加载主类解决方法:1.首先检查
- 先来看看效果实现效果模拟水波纹的效果:点击屏幕就有圆环出现,半径从小到大,透明度从大到小(0为透明)实现思路 &nbs
- 事件:定义了事件成员的类允许通知其他其他对象发生了特定的事情。具体的说,定义了事件成员的类能提供以下功能1.方法能登记它对事件的关注2.方法
- 如果对一个值可以包含多个,那么可以使用枚举,加上Flags。新建一个Flags枚举类型:[Flags] publi
- 开发人员可以用以下两种方式声明UI:一是通过.xml文件(不带预览界面)或者.axml文件(带预览界面)来描述;二是用C#代码实现。&nbs
- 关于静态类型检查和动态类型检查的解释:静态类型检查:基于程序的源代码来验证类型安全的过程;动态类型检查:在程序运行期间验证类型安全的过程;J
- Android中的Service和其调用者既可以在同一个App中,也可以在不同的App。如果Service在App1中,而调用Service