本文主要是介绍ssm集成沙箱支付宝支付,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前测试一直显示系统繁忙,问了一下才旧版沙箱已经停止维护了,要登录新版沙箱沙箱支付
1,注册支付宝开发者平台,进入是这个页面
appId,gateway是等会在项目中会用到的,**选择自定义**,点击设置并查看。
2,点击设置并查看之后,让根据应用公钥生成支付宝公钥,我们需要下载**生成工具先来生成这个应用公钥。
可以发现生成了一个应用公钥,一个应用私钥,这两个记住他们的位置,等会都会用到。
3,使用应用公钥生成支付宝公钥。
注意!!!我们后面真正要用到的是这个支付宝公钥,应用公钥只是为了生成支付宝公钥,千万别搞错了。
将刚刚的应用公钥粘贴下来,自动生成支付宝公钥。
4.准备完成
目前为止,appId,gateway,**,publicKey都已经有了,这四个是接下来必须的配置,我已经都标注了。
5.进入到项目当中,导入依赖。
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.16.2.ALL</version></dependency>
6.创建配置文件aplipay.properties
前面四个属性按照自己的配就可以
returnUrl指的是支付成功之后同步回调地址,这个不是必须的。
notifyUrl指的是异步回调地址,在支付成功之后,支付宝会给我们异步发送本次交易的详情。注意!!!这个地址必须是公网地址,因为是在本机上测试的,所以用了内网穿透,后面再说。
alipay.appId=9021000132618445
alipay.privateKey=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyg5po29pFfrFLiz1uHipN/EZSDbGHtvHn8kG1eTn5ypbEXLEaEu+fS2o1JWrVa68Lx8QKl8BlgBOfQONkQ73Z5hB9fCZQZWsbf+OUb+EO/S12G2Gzia9xfp2YtKm747ORCsYmreaH6/IlKTm0uVXQHObMz4MmO1Auk0ixBUgMx7ellM4u0vxmP19q1CtHuIQowdVYkp+kRoxZTIeqKihY84iAQlW7mxV0XN2nNfoIUXV+8AJt497azlOpZiLK7GPGDDuNUn1TZRB9pOHqHze9OpzQ2JriqrMAX+cioNk+r4z+HAA9+uKJ2nuFaZsqYLOx6LJ3CCxijpIlQVVAOPClAgMBAAECggEAPHCcXfZZ73+WrZomIVtrPV41vOBQBEAnpT17i+LQg0dZRoCPoeFZahiRjA7wHfRInvdy45c/l94GRrwkgTUCWX0whhv7qOq9meDx/7blfzqvIrbgnHX4hbe1yhcZBLlyeaApOL1WORzkrjpIBG1fpYeziRKVN+OLIUnSqcS9AT4m5U1mogsf0A/V3eVs2yCPdNT6w5cT99/2BLgBINW72iDWAgFzw4H1oSIKQdEdrJ37bpQRWjE+GPTTaLJeyXDnpXIodmXjuQnLnKjUkwbZqi7Sn4pVAeeZTJ2zdomfUYGPlZOKg7kPA1Kij525vvpV2czklBG1YhUZeeyPJ6U3oQKBgQD51XVKN4fW12OBPw2OwzULGXeu3pM68GTySWEtQRTBXUgOdr/SlVYstzLvl53wi3F9m+VOS2M4dY+yfItXk0Lgyf3TZuyGI3xOBo6Vfc83ksUoOr1SXe39yHUULJfjU0RSwRiJ1+M5PofIm0UU5Hdl64/6K5QiS2r3GEuHNtoybQKBgQC264VJS0C95MrW9pvbcmsZeBbHk3w4TtDW4+eMMhBmEr94HLyygqavjDcOCENwtvIgm13dbHAaK2LgGtj6FXsYpzyXbFg2N0l98LI1z84Jf8VpKQiwwTtB8oJadprokcyFIvYCTtaYIkoDPt5xbb+fKC91VT6+X7PrLTHg3O+UGQKBgQCQsTPQ3ABsSSpz/FSZziy2VPWf7YBPrlKIkD8buomOw7urxNKr35mdJCz33lO2sMv194gCpF6+oDetI7x/5+Xf0pyTBxUNSxf/CIUjx01v3i0Zc4uaXJQtWx+To5AENIFpfDP+AW60BKcXY/XKd9c+zAMC3KJailtU6Fk14mrUsQKBgH5iMkBW50+M4f0ufLdd0dPSHmMcaup4wmCHLPe3q47rCzHRIStxi/uktHFUkkwxiw+uaWdQwg/CxFk1E4+PAfMhsYKqEDS9dGC4yljV0HTNvDcRa/i8OdYx2ZDpe9SO0DF422Ly1+BbaKnfaVAT1R8BY/D8yhI9C5HFMz47SKkZAoGAOBDzKkhv4dW7bl08qHCiwBYJ3bLFGGuwv4PP9eMqb9vwdIDEzNAZbouZ7Jsf3ZMwaJyMLx4FP5b2PjNsULt33mGlzsiUt3k8hzGfqEfqRk1drLzCfM+B25lQuBh8+NvPUzGQiyxTH/9+T5pd5Ud00wJDxtXVtCUDddXC1t0QUDg=
alipay.publicKey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvK0u9cOpmhjLTtrDo4dDl66ud5v1qNSyj5/iLxLAw6oecDohGu9NSvttySTihLnuClKQmGePSVQmprVjL0erziF8qZP/ZzcbRyocNLGlyQWJo7CEPBbscYy0tENtBgv9mxi+9un0f5u9JIe6zf6FRX34+7tF0BBq5fVW//uuupSqffn30zX4RSaY/JymFwuWjxKZI4t3nO/iTJdu8FIhI+UddmTtsBh1YTe2BQeuFAavASH/WzOjk0d6gTzOFYXFswIrxrFD80FnCVttWfTiKeLWPoarxOGe5LoS2QQKA4+X8Yj3ze+tw0z4GB1lf+r+2oMy4Ad4F5J82C3572Vx7wIDAQAB
alipay.gateway=https://openapi-sandbox.dl.alipaydev.com/gateway.do
alipay.returnUrl=http://vfqahy.natappfree.cc/returnUrl
alipay.notifyUrl=http://vfqahy.natappfree.cc/returnUrl
7.编写配置类
@Data
@Component
@PropertySource("classpath:alipay.properties")
public class AlipayProperties {/*appId*/@Value("${alipay.appId}")private String appId;/*应用私钥*/@Value("${alipay.privateKey}")private String privateKey;/*支付宝公钥*/@Value("${alipay.publicKey}")private String publicKey;/*网关*/@Value("${alipay.gateway}")private String gateway;/*支付宝前端跳转 不需要是公网!!!*/@Value("${alipay.returnUrl}")private String returnUrl;/*异步通知 公网!!!*/@Value("${alipay.notifyUrl}")private String notifyUrl;}
8.创建Controller。
支付宝要求必须有一个订单号,所以我们就给他生成一个订单号orderNumber.
sendRequestToAlipay方法设置参数,向支付宝发送请求,里面这些参数约束是支付宝规定好的。
sendRequestToAlipay中的这个pageExecute是向支付宝发请求。
@Controller
public class PayController {@Autowiredprivate AlipayProperties properties;private final String CHARSET = "UTF-8";private final String FORMAT = "JSON";private final String SIGN_TYPE = "RSA2";@ResponseBody@RequestMapping("/pay/alipay")public String alipay(@RequestParam("dona_money") float dona_money,@RequestParam("dona_id") int dona_id) throws AlipayApiException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");String timeStr = dateFormat.format(new Date());String orderNumber = timeStr + new Random().nextInt(1000000);//向支付宝发送请求return sendRequestToAlipay(orderNumber,dona_money,"ghjk");}private String sendRequestToAlipay(String outTradeNo, Float totalAmount, String subject) throws AlipayApiException, AlipayApiException {//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(properties.getGateway(), properties.getAppId(), properties.getPrivateKey(), FORMAT, CHARSET, properties.getPublicKey(), SIGN_TYPE);//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(properties.getReturnUrl());alipayRequest.setNotifyUrl(properties.getNotifyUrl());String body = "";alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"total_amount\":\"" + totalAmount + "\","+ "\"subject\":\"" + subject + "\","+ "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求String result = alipayClient.pageExecute(alipayRequest).getBody();return result;}
}
9.测试
为了方便,我直接在地址栏请求这个接口,如果正常,显示的页面如下,接着正常填写即可。
如果出现异常,很大概率是配置文件配置的不对,那就再检查一遍。
【可以看到那个页面,这个好像属于违规因为有二维码,发不出来】
10.接下来写回调接口。
在支付成功之后,会自动回调上面配置的alipay.notifyUrl那个地址。获得订单详情等等.....
这是地址必须是公网地址,不然打不过来。natapp内网穿透配置
@PostMapping("/notifyUrl") public String payNotify(HttpServletRequest request) throws Exception {if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {System.out.println("=========支付宝异步回调========");Map<String, String> params = new HashMap<>();Map<String, String[]> requestParams = request.getParameterMap();for (String name : requestParams.keySet()) {params.put(name, request.getParameter(name));System.out.println(name + " = " + request.getParameter(name));}String tradeNo = params.get("out_trade_no");String gmtPayment = params.get("gmt_payment");String alipayTradeNo = params.get("trade_no");String sign = params.get("sign");String content = AlipaySignature.getSignCheckContentV1(params);boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, aliPayConfig.getAlipayPublicKey(), "UTF-8"); // 验证签名// 支付宝验签if (checkSignature) {System.out.println("交易名称: " + params.get("subject"));System.out.println("交易状态: " + params.get("trade_status"));System.out.println("支付宝交易凭证号: " + params.get("trade_no"));System.out.println("商户订单号: " + params.get("out_trade_no"));System.out.println("交易金额: " + params.get("total_amount"));//自己的业务}}return "success";}
这篇关于ssm集成沙箱支付宝支付的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!