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
0
投稿
猜你喜欢
- 项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传
- 题目描述Java创建线程的几种方式Java使用Thread类代表线程,所有线程对象都必须是Thread类或者其子类的实例。Java可以用以下
- 本文实例为大家分享了java使用字符画一个海绵宝宝的具体代码,供大家参考,具体内容如下用字符画一个海绵宝宝用" &ldqu
- 一、Jvm加载对象在说Java * 之前,还是要说一下Jvm加载对象的过程,这个依旧是理解 * 的基础性原理:Java类即源代码程序.j
- 前言虽然从学java的第一个程序——helloworld至今,已经有好几个年头了。当时自己找资料,看视频,学习了java的输入输出流,多线程
- 一个是新浪微博,腾讯微博的分享按钮,一个是他们的绑定情况(其实就是是否授权)。点击微博分享中新浪或腾讯按钮,就进行相应的授权(若没授权),显
- URL(Uniform Resource Locator)是统一资源 * ,它是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,
- 这篇文章主要介绍了Java import导入及访问控制权限修饰符过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 前言前面一篇我们介绍了使用 shared_preferences实现简单的键值对存储,然而我们还会面临更为复杂的本地存储。比如资讯类 App
- Android Studio 打包 jar 及 aar 包创建工程 New -> Module -> Library在gradl
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 序言在flutter开发中,我们使用 bloc 框架,基于状态变更进行响应式开发。本篇文章,小轰将 bloc 核心业务块进行拆解简化,聊一聊
- 这节主要完成一些基本的增删改查以及Service、Dao和Action的抽取。1. Service层的抽取  
- spring mvc中的@PathVariable是用来获得请求url中的动态参数的,十分方便,复习下: @Controller publ
- Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16。step1:创建一个包含C++的项目其他默认就可以了。
- 在java.lang.Runtime.exec的使用中,我们经常会用到将重定向命令执行的输入/结果或者将错误信息读取出来.那么,在使用过程中
- Android权限一般是在AndroidManifest.xml中声明,在安装或首次使用的时候系统会自动提示用户是否提供权限Android官
- 1. Mybatis JdbcType与Oracle、MySql数据类型对应列表MybatisJdbcTypeOracleMySqlJdbc
- 几个月前写过一篇博客《xUtils3.0框架学习笔记》 ,上面也有记录通过xUtils实现文件上传的使用方法,代码如下:private vo
- flutter material widget组件之信息展示组件,供大家参考,具体内容如下widget分为两类:widgets librar