springboot调用支付宝第三方接口(沙箱环境)

作者:LADDERIT 时间:2023-11-25 06:12:08 

springboot+调用支付宝第三方接口(沙箱环境)

大神勿喷!!

网址:https://developers.alipay.com/platform/developerIndex.htm

springboot调用支付宝第三方接口(沙箱环境)

springboot调用支付宝第三方接口(沙箱环境)

沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr

下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,应用私钥.应用私钥自己保存,应用公钥应该到支付宝的开放平台上生成相应的支付宝公钥才可以正常使用.

springboot调用支付宝第三方接口(沙箱环境)

springboot调用支付宝第三方接口(沙箱环境)

沙箱工具中点击设置

springboot调用支付宝第三方接口(沙箱环境)

springboot调用支付宝第三方接口(沙箱环境)

springboot调用支付宝第三方接口(沙箱环境)
保存好

springboot调用支付宝第三方接口(沙箱环境)

上述操作完成后,即可进行代码的编写.

二. 配置一个用于支付宝调用的Config


package com.mr.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
*类名:AlipayConfig
*作者:AAA_有梦想一起实现
*/
public class AlipayConfig{

// ↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "2016101200671304";//例:2016082600317257

//
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDdMTRJ3Zb+02z8FB8DlH/alg8+aJmzUrZuEjXX2dLcNa40iceSor6hm797VAtfRNvSNVtWsNGkWm/wrmX3l/gn6/tY1LvLv8B2jl1Lg3lN1KQWsHcJ6GI1HvoWSMdJGj3OeA5UttHheDga/7mjTYIcxoBZs9uBXvFnYDSv+f5v59h9SK5N/+OtIBtCw+YzoJC9U6RkxbrR//F/XgQ76XMtKITzHYLn2cN0eD6XvD8rngC3I/9DX0vVLax1X7JuM00dVUhmJegzFsQv6Z3CfeBZ+euhNPSVgfTCMwzD74qbHz8LR0NviNm7AuAjkqxDUM+HJNW7TQbpbCS/z14nXd7lAgMBAAECggEAcYOL4xB+Kh6UwrUMyYiPKL1z60JBBr8+8jQUP8cAqJQ/56SBsCYnEMbeOMuD3ot3CGTrkAzEOcVTxz+pAqyR5OL9JbRfAAxTGEStalB5k1C6OQ6suH/yznIsQ/1rkH+QEoKYUC9WfJB2spxkR4NCb8QLIH3l+3mfB79eqqTwR7rOp8yjG0Yzme96HplP/MjTgS7M5P+K3SVibb+he9DQa1bSB9jDGXJzFJ8AdRHUHg3gucQI4PFxbM25aBvQUC37/FF2riQFD4akJkoIHRjvrRsWW+f07H8Cr+aH6jlj0tMVTxk86GzXF7rME+LTACDsF4vA3gXGOPS7VpK2M19sTQKBgQDu9dxQ+m14cJjeH1bI2KGF7wqnfz1Tw1TNC9O5iZSKWbVpL8yM1qgDgOQ7Dano+uq/3dloeeXTV8J3LcnzfaImqq44nCTVD7gdKF95Ei9s609GbLhDmKrt+8SB/r1WJAqQofzl2OE0hdUqpi4i8s7HUdCyjh/yZnSfIrWm0+XjfwKBgQDs9v3SiahNmI8niUIW8CtU7V5SkP7RHJiHGKZkVisiqFQJArT+LfRMLc5bHhd5GvwDlgHDonKQbSq8i9A63xLGJNnuCOahcKEkWsFsUAb80iLre5OmLvKKeKHcVnffkGXIFW/vrhHqBvgzeKqrlvn5OaVGC/omM/OVojrzML9fmwKBgQDNUwRTsFqPunAfq93uBfYEFzmYYoRXjOc4qIjsS4MOvbZbA29HNMp4+C8jbsIoJjG/WuiMFPGdfzLhJL76MWE6yD2a9s/PIwqYQzCF31JQzH/5i0FpE60Lf+GBsVkOwzkwvX+IH6qibryTQOczsF5sdahVRDm/FrnuYuyixEAsEQKBgQC+goBkULnX0Kxe29IfgO1FdSTc+qdy1SuniWDU0BYT4gLVz7BVnfqHeFgsF1BF1DUCaQp4D1VN2gZ+2WUKv6dnV99BqTRKXLOg97oD638CqarbaVm2RI5IV13COF5dhcjeiKWaq3bJkNrg/sUv+Mx12yuN2jk9l4zhIzGDrRBeuwKBgQDd2Y1BNmL8Q5iTq+q6TyHBVKchJGrkqLQn7S7x9mBEmCFhhWe0+8ZEN+wXw6pMVV5792g8eY8q0QI1TFIPkuJ8PdMTM6OFQxAjvDfO5JrapxfQSa3Jp6gwyokB6AjpKslLdgBJBs55/rtGPj/6YGxWiCvUvEbVgGbIszeJmcMwMA==";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm
// 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi6SVG0As6Kak8f5ouIJ6DecmZZfmkk/U8/90SCmUwdGlh66olKWzOF3Sv9S62jOeHQSi6I/NCe4SDB8N92Ocr9cI3aKwmBeqeXVAxD3/HcVTuywBAhymlgAsDVLd/W6nbVPisHcPBX9f+x/5dP9B2ukz531NmGqpbQ3eiziaE26uHhvBIoicjv90nWM9hB8fGCMYooEVxZ+Mh7zVRMlv+r6HJzBpgL4dqEqSGfPdZZJC9yDfxu+D9Q4A7yuT3I75+tu2AiaAM7S+K/MIAvpvPw3wL4C+XEMaPOV3NITxMQAk9Hkvx5AV9W+jpUdhSgJtHIfe/AzD4qu8ADeV3OBk1wIDAQAB";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
/**
* 返回的时候此页面不会返回到用户页面,只会执行你写到控制器里的地址
*/
public static String notify_url = "http://127.0.0.1:8080/good/notifyUrl";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
/**
* 此页面是同步返回用户页面,也就是用户支付后看到的页面,上面的notify_url是异步返回商家操作,谢谢
* 要是看不懂就找度娘,或者多读几遍,或者去看支付宝第三方接口API,不看API直接拿去就用,遇坑不怪别人
*/
public static String return_url = " http://127.0.0.1:8080/good/return1Url";
// 签名方式
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "gbk";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 日志地址
public static String log_path = "D:/logs/";
// ↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

/**
* 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
*
* @param sWord
*      要写入日志里的文本内容
*/
public static void logResult(String sWord) {
 FileWriter writer = null;
 try {
   writer = new FileWriter(log_path + "alipay_log_"
       + System.currentTimeMillis() + ".txt");
   writer.write(sWord);
 } catch (Exception e) {
   e.printStackTrace();
 } finally {
   if (writer != null) {
     try {
       writer.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 }
}
}

如果你是在本地测试,支付完成不会跳转回调页面,那么就需要外网了,推荐一个东西,叫内网穿透,只要你电脑tomcat启动,可以连接外网,可以从127.0.0.1:8080或者其他端口也行进入你的项目,就可以用;

【内网穿透】

某花生qiao,不免费6块大洋---------------------------NATAPP 有免费的(只是域名会强制变),不过测试足够了----------------------ngrok或者frp自行度娘

也有免费开源的,如果不想麻烦就用【NATAPP】吧,网址貌似是:natapp.cn

三.控制器Controller里的代码

pom.xml里的依赖

springboot调用支付宝第三方接口(沙箱环境)

如果不是maven项目,下载jar包导入

下载地址:http://central.maven.org/maven2/com/pentahohub/nexus/alipay-sdk-java/20150820220052/alipay-sdk-java-20150820220052.jar

Controller代码


/**

快捷支付调用支付宝支付接口

@param model,id,payables,

@throws IOException,AlipayApiException

@return Object

@author AAA_有梦想一起实现

@date 2017年11月29日

payables//获得价格

subject//商品名称

bodyv//商品描述
*/
@RequestMapping(“alipaySum”)
public Object alipayIumpSum(Model model,String ordId, String subject, String body, HttpServletResponse response)
throws Exception {

// 获得初始化的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);

/* SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddHHmmssSSS”);
String out_trade_no = sdf.format(new Date());*/
// 商户订单号,商户网站订单系统中唯一订单号,必填
Order order=orderService.getOrderByOrdId(ordId);

// 付款金额,必填
alipayRequest.setBizContent("{\"out_trade_no\":\"" + order.getOrdCode() + "\","
   + "\"total_amount\":\"" + order.getOrdMoney()
   + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + "明瑞教育," + "\","
   + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
// 请求
String result = alipayClient.pageExecute(alipayRequest).getBody();
// System.out.println(result);
AlipayConfig.logResult(result);// 记录支付日志
response.setContentType("text/html; charset=gbk");
PrintWriter out = response.getWriter();
out.print(result);
return null;
}

参数传入是必须有的,不然会报错,说订单信息有误

如果有其他额外参数,请参考支付宝第三方API文档,这里菜鸟能力有限,懒得去查,也懒得写了

支付宝第三方支付API地址:https://docs.open.alipay.com/api_1/alipay.trade.create/

支付完成回调------异步返回商家,也就是notify_url

代码:


/**

正确跳转支付成功页面

@return
*/
@RequestMapping(“return1Url”)
public String return1Url(HttpServletRequest request) throws Exception {
System.out.println(“这是return1Url方法”);

System.out.println("----------------------------notify_url------------------------");
// 商户订单号
String ordCode = new String(request.getParameter(“out_trade_no”).getBytes(“ISO-8859-1”), “GBK”);
//成功后修改支付页面
orderService.updateOrderPayType(ordCode, Constant.ORDER_STATUS_NO_PAY);
//跳转页面
return “redirect:/good/toCreateOrder”;
}

关于代码中用到的Servlet的东西,请自行进行改进吧,还有不要像我一样把业务写在Controller里,要写在service里哦!

我这边就简单的返回了一个页面;


/**

正确跳转支付成功页面

@return
*/
@RequestMapping(“return1Url”)
public String return1Url(HttpServletRequest request) throws Exception {
System.out.println(“这是return1Url方法”);

System.out.println("----------------------------notify_url------------------------");
// 商户订单号
String ordCode = new String(request.getParameter(“out_trade_no”).getBytes(“ISO-8859-1”), “GBK”);
//成功后修改支付页面
orderService.updateOrderPayType(ordCode, Constant.ORDER_STATUS_NO_PAY);
//跳转页面
return “redirect:/good/toCreateOrder”;
}

来源:https://blog.csdn.net/weixin_45761027/article/details/102595276

标签:springboot,支付宝,接口
0
投稿

猜你喜欢

  • java并发之原子操作类和非阻塞算法

    2022-04-13 04:39:01
  • Java-String类最全汇总(下篇)

    2023-11-09 14:45:26
  • 解析Java实现随机验证码功能的方法详解

    2022-09-25 23:26:14
  • 深入分析c# 继承

    2023-02-18 21:36:31
  • 20.5 语音合成(百度2016年2月29日发布的tts引擎)

    2022-06-26 06:55:01
  • Java中使用Lambda表达式和函数编程示例

    2022-05-06 03:30:40
  • 谈谈Java中整数类型(short int long)的存储方式

    2023-01-01 08:24:33
  • Android编程实现ListView滚动提示等待框功能示例

    2022-11-15 13:50:15
  • java 获取日期的几天前,几个月前和几年前的实例

    2023-05-20 15:29:53
  • Java数组索引异常产生及解决方案

    2023-11-05 16:52:27
  • 详解如何使用Android Studio开发Gradle插件

    2023-11-20 23:39:05
  • 在Winform框架界面中改变并存储界面皮肤样式的方法

    2021-06-08 09:08:24
  • Maven项目读取resources文件路径问题解决方案

    2023-04-21 15:05:11
  • Unity实现场景漫游相机

    2023-06-15 19:08:57
  • python、java等哪一门编程语言适合人工智能?

    2021-06-04 03:22:53
  • Android使用Handler实现定时器与倒计时器功能

    2022-03-30 09:06:57
  • C# List介绍及具体用法

    2021-09-15 07:59:14
  • Java Collection集合iterator方法解析

    2022-11-17 06:43:29
  • C#使用Json.Net进行序列化和反序列化及定制化

    2023-07-10 19:11:35
  • Java中接收键盘输入的三种方法

    2023-11-13 16:11:29
  • asp之家 软件编程 m.aspxhome.com