Fork me on GitHub

支付宝电脑网站支付

进入蚂蚁金服开放平台->开发者中心

按照文档新建应用,下载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");
        
        
        //获得初始化的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);  //设置异步回调通知
        
        //设置支付参数
        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&timestamp=2018-07-06+10%3A17%3A37&sign_type=RSA2&notify_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="{&quot;out_trade_no&quot;:&quot;201876101732228&quot;,&quot;total_amount&quot;:&quot;1000&quot;,&quot;subject&quot;:&quot;测试&quot;,&quot;body&quot;:&quot;&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;}">
            <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代码的这段注释

posted @ 2018-07-06 15:03  秋夜雨巷  阅读(2284)  评论(0编辑  收藏  举报