1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 调用支付宝第三方接口(沙箱环境) Spring Boot+Maven

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

时间:2023-09-17 18:52:15

相关推荐

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

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

一.蚂蚁金服开放平台的操作

网址:/platform/home.htm

支付宝扫码登陆

登陆之后点击开发者中心

然后配置你的沙箱支付宝

支付宝提供一键生成工具便于开发者生成一对RSA2密钥:

https://docs./291/105971

注意:生成时一定要选择PKCS8+2048,第一个坑

将应用网关和回调地址更改为:

【AES密钥不用管】

【然后往下会有支付宝沙箱安卓端工具,下载,以供后续支付使用】

【沙箱里有沙箱账号,可以用其登陆,Don’t tell me you are 看不到,实在不行我提供给你,你发来邮箱,谢谢!!!!】

【还有要用买家账号登陆】

OK!到这基本配置就完了,可能有忘了的,后续再加吧,下面进入大家喜欢的代码时间:

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

package com.mr.util;/*** Created by Administrator on /10/15.*/public class AlipayConfig {// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String app_id = "10171315";// 商户私钥,您的PKCS8格式RSA2私钥public static String merchant_private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBEXla0VooIWTSKRCrSZGnv3ZamLSBVFKyT8xibJZVyMS/swEvEd8p7zh6CB9bUwEO6Sy8sm1IcWd+ugFX62AyIPlgAH/7DO8gae+TIyRD1Yuu3IOCn5xfk0DIy/i+49eq4m6b34rzl1dv1MCNQn63ZfkEY32kPkWsSfDxOFTn6ZoBRzQMgukMDOgrgJqOqTsUUMDFbK9SxkNr1nhpN7dy9hzC7Y8fxZcQ9ozYVl6gysqC905Gby5H7sTk3zNTq54An6K1SA0a8M4b478lmoIkaJCnHGbaUV9bwmLgfgvoKnGQT1X/U/nOft2V5n4DIzHL9HMArn320SQvh52XheyBAgMBAAECggEBALSeY1iaKG0IqKiP8F8+STyUuuWQnLWtLFxSmROvIImKdL4eecoOPyec+8n2VVd7dK79Z3P0vJYcOcVtwBn/QpRDEulELnawJ/m8AXw2URQA8FebRpDqP0GOofn4EHKM9tOQWAgM/pJakFs3vxeoEKIEjQ0VApKoC0heOEGDALOfzMkZ07p4z4V6daFhg31LR9n/hAPSboejIBjCoYR/VMlPHYEGt3nG9f46dbu1fU8dEybCyUc8yQ8DKeNcQxiK4LTpNiYuaqQMheQ9pU6+m8Xoh6F56fdFAqhhrYrYxs8rBQrUHo2tYFMLtaAqnqsW+hGlQAEfOZ88xl3Dw9icBkECgYEA/BF8mIZqOSSTJZc8L0z+pB9os0+NCGqpV72QxCmFC0p/3cC+0p+ZZ8feetluL1sOJyvgrDsURZTiHlReRLb8j8j7K5eF4KzZvxdVmxIuMi5ZaKYqM86BuA7AEvt52OrlLgZq0Has0DwzUv5ea8uQbqnNAx97QsgEhDltJ3oZ68kCgYEAxBRmKfvzMRdFmrIzSadGyJ9N6pks0RL4l17xwX83G5KY/8EZYp9WEcbl35bVV0INcsJ8KJKSdBr+85Lv8lQ5M/Bo7oT8QSvxMjJh7u3oPK9p7Y1BTRd7SPavScAWaOCx0e4OdDLAiEXQQ1jWHFbshmlit5U14BO8lrKunaEx5vkCgYB1Fv5kr5OqRaYgwRbQ9hgXTwvIt3xQ25McUc9sf8jwjMPG06EQn9iXz802DchUMRzq70PnXW42QEmlQxWjH8lEVVzvS+yBiGmBjapTZWeWIdegeAeElznEsP1iE/Tu4XZiIdL+URJHjJ9evxBHTIEkFrZH7BjK1bTbYv2kZ+CgmQKBgQDDD/wWtkPXyWwAGlk1Y4jiWsCbquhP0cymYdilg1YiQvOcMtB7MUHhi3nxtc7k8JwKV3pGrpGtmZGaZMn5zFnf1sG8z2VXvExFgKO2msyXWnZJ0WVuOPb3vhjhiIuCqE2eJ3IPnNG2f6VQ6laOeNbyXHLNaU3gbiIF1RorTEolmQKBgD00c48KoTiqiqo8by+ifpyhXu0uI29R/kjx5vMvmr9BVqt4kbGU+eo/NpsHqmnk1EzmyEHB306i7yydawtm4DZwNAFdqTEizlYZ5tDxcAY+05e976JNMZcPFhmcFhndL0hKI3Cjf8r8NbbLN4eTVcs/DPBPt7Td87r+wT7Q2TVb";// 支付宝公钥,查看地址:/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi6QxmURHsxto9qNwj50kjqLHT0pgr9qEoybysQ4XL2BvW6P2foOdAMqCTzWBIATVMZUr6R5+VQ+8pFN1qM9BqQfzmvIeNXY2I0abha58WG4ynoSx3dzBoEcV+tDPh3X7oAGThTNVvegq0etKp4YzFUdWo5gGIFuCgvZDysO9x/iOm/z3T9E30DV/a8M7hgLuWC09s54fIPpqteMr0/grvducpYpeMWTY1iq5pkJF3LF6ge2+GDDQ+UqhHfr5s6EAG/zETierdS2YZG+whO+z2NC3q5tMsw8+9BQEdCw9ZkJnsMSWkuvgPQy5hMEzCsq6LNCE5v4oyCjfGFU4st7WpQIDAQAB";// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://localhost:8080/pay/alipay-callback-return-sult";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问/*public static String return_url = "http://localhost/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";*/public static String return_url = "http://localhost:8080/pay/alipay-callback-return-sult";// 签名方式,注意这里,如果步骤设置的是RSA则用RSApublic static String sign_type = "RSA2";// 字符编码格式public static String charset = "utf-8";// 支付宝网关public static String gatewayUrl = "/gateway.do";// 支付宝网关public static String log_path = "F:\\images";}

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

【内网穿透】

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

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

三.控制器Controller里的代码

pom.xml里的依赖

<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.4.ALL</version></dependency>

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

点击进入网站下载

Controller代码

@RequestMapping("alipaySum")public Object alipayIumpSum(Model model, String payables, String subject, String body, HttpServletResponse response)throws Exception {// 获得初始化的AlipayClientAlipayClient 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());// 付款金额,必填String total_amount = payables.replace(",", "");alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount+ "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + 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地址:点击进入

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

代码:

/*** p2p后台返回的操作* @param response,request* @throws Exception* @return void* @author AAA_有梦想一起实现* @date 11月30日*/@RequestMapping("notify_url")public void Notify(HttpServletResponse response, HttpServletRequest request) throws Exception {System.out.println("----------------------------notify_url------------------------");// 商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "GBK");// 付款金额String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "GBK");// 支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "GBK");// 交易说明String cus = new String(request.getParameter("body").getBytes("ISO-8859-1"), "GBK");// 交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "GBK");if (trade_status.equals("TRADE_SUCCESS")) {//支付成功商家操作//下面是我写的一个简单的插入操作,根据你的操作自行编写/*Map<Object, Object> map = new HashMap<Object, Object>();map.put("cuId", Integer.valueOf(cus));RepaymentPlan repaymentPlan = new RepaymentPlan();Integer id = Integer.valueOf(out_trade_no);double payablesCheck = Double.valueOf(total_amount);RepaymentPlan repayCheck = serviceMain.selectByPrimaryKey(id);double total = repayCheck.getPayables();if (Double.valueOf(total_amount) < repayCheck.getPayables()) {map.put("ubalance", total - Double.valueOf(total_amount));serviceMain.updateCusMoney(map);}repaymentPlan.setId(id);repaymentPlan.setActualPayment(total);repaymentPlan.setRepaymentStatus(1);int i = serviceMain.updateByPrimaryKeySelective(repaymentPlan);System.out.println("---------------------还款影响行数----------------------------" + i);*/}}

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

支付完成回调------同步返回用户的页面,也就是return_url,

代码:

/*** 同步通知的页面的Controller* * @param request,response* @throws InterruptedException*/@RequestMapping("return_url")public String Return_url() throws InterruptedException {return "alipayexit";}

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

最后贴上请求支付接口的JSP的页面吧

<form name=alipayment action=alipay.trade.page.pay.jsp method=posttarget="_blank"><div id="body1" class="show" name="divcontent"><dl class="content"><dt>商户订单号 :</dt><dd><input id="WIDout_trade_no" name="WIDout_trade_no" /></dd><hr class="one_line"><dt>订单名称 :</dt><dd><input id="WIDsubject" name="WIDsubject" /></dd><hr class="one_line"><dt>付款金额 :</dt><dd><input id="WIDtotal_amount" name="WIDtotal_amount" /></dd><hr class="one_line"><dt>商品描述:</dt><dd><input id="WIDbody" name="WIDbody" /></dd><hr class="one_line"><dt></dt><dd id="btn-dd"><span class="new-btn-login-sp"><button class="new-btn-login" type="submit"style="text-align: center;">付 款</button></span> <span class="note-help">如果您点击“付款”按钮,即表示您同意该次的执行操作。</span></dd></dl></div></form><!--这里的target为_blank是新打开一个窗口-->

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。