Java如何在沙箱环境中测试支付宝支付接口
时间:2022-12-24 13:50:26|栏目: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"; }
运行项目,发送请求.跳转到如下路径代表成功.
结果展示