进入蚂蚁金服开放平台->开发者中心
按照文档新建应用,下载RSA密钥秘钥生成器,然后设置为应用公钥,设置完成后会自动生成支付宝公钥。
下载demo代码,下图为web支付,包括一系列功能及回调通知、异步通知。
更改AlipayConfig.java代码
将demo改成servlet请求,方便逻辑处理返回其他数据
AlipayConfig.java
package com.alipay.config;import java.io.FileWriter; import java.io.IOException;/* **类名:AlipayConfig*功能:基础配置类*详细:设置帐户有关信息及返回路径*修改日期:2017-04-05*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。*/public class AlipayConfig {//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String app_id = "APPID";// 商户私钥,您的PKCS8格式RSA2私钥public static String merchant_private_key = "RSA私钥";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String alipay_public_key = "根据RSA公钥生成的支付宝公钥";// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://异步通知接口地址/notify_url";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "http://同步通知地址/Alipay/return_url.jsp";// 签名方式public static String sign_type = "RSA2";// 字符编码格式public static String charset = "utf-8";// 支付宝网关public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ }
Pay.java
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取要向支付宝支付的参数,由页面传过来//商户订单号,商户网站订单系统中唯一订单号,必填String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");//付款金额,必填String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");//订单名称,必填String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");//商品描述,可空String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");//获得初始化的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); //设置异步回调通知//设置支付参数alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明//alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," // + "\"total_amount\":\""+ total_amount +"\"," // + "\"subject\":\""+ subject +"\"," // + "\"body\":\""+ body +"\"," // + "\"timeout_express\":\"10m\"," // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节//请求String result = null;try {result = alipayClient.pageExecute(alipayRequest).getBody();} catch (AlipayApiException e) {// TODO Auto-generated catch block e.printStackTrace();}//输出/*打印的是支付宝付款码页面<form name="punchout_form" method="post" action="https://openapi.alipaydev.com/gateway.do?sign=NM7Zk33PH6W%2BFxkXVMfcg4ZeTVas3YS5aJoktIiZZOLv1hO4o23yHQvSW%2BTRt5RJCMJFcX0V%2BJQPoHwznZDA31ZywODBfqTjhsHaBenpbmxVOXjKSJE0ODI8Wf39d2AMDRThIJT6m4FtGYvbHMAgHeDLhX0X5HYgg5mGzZJLYAXbcgBKJioULyEX5Yfn%2Bd7twx8F01pJWsfeCFWkQNd46GetzQ83HivXDEmHXEbV3N47gjgJYBSlptLhK%2Bj9d8QTzvYJ6el3D×tamp=2018-07-06+10%3A17%3A37&sign_type=RSA2¬ify_url=http%3A%2F%2Flocalhost%3A80%2FAlipay%2Fnotify_url.jsp&charset=utf-8&app_id=20160804&method=alipay.trade.page.pay&return_url=http%3A%2F%2Flocalhost%3A80%2FAlipay%2Freturn_url.jsp&version=1.0&alipay_sdk=alipay-sdk-java-dynamicVersionNo&format=json"><input type="hidden" name="biz_content" value="{"out_trade_no":"201876101732228","total_amount":"1000","subject":"测试","body":"","product_code":"FAST_INSTANT_TRADE_PAY"}"><input type="submit" value="立即支付" style="display:none" ></form><script>document.forms[0].submit();</script>*/response.resetBuffer();response.setContentType("text/html;charset=UTF-8");response.getOutputStream().write(result.toString().getBytes("utf-8"));response.getOutputStream().flush();//response.getWriter().println(result);//response.getWriter().flush();}
支付接口源码
问题:
回调通知验签成功,异步通知验签失败。要把异步通知中demo代码的这段注释