java程序支付宝接口付费功能的实现

以前做过c#应用程序支付宝api接口功能,现在转移到Java程序上,代码如何实现呢?
1、从你的网站提交到支付宝:

/**

* 将订单提交支付宝进行网上支付
 */
public ActionForward submitAlipayUrl(ActionMapping mapping,
        ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    String orderNo = request.getParameter("orderNo");//订单编号
    HashMap hm = new HashMap();
    hm.put("_input_charset", "utf-8");// 采用相同的编码方式
    hm.put("body", "企鹅个性化图书订单,订单号:" + orderNo);// 填写在跳到支付宝页面上显示的付款内容信息
    hm.put("notify_url", "http://127.0.0.1:8888/mypenguin/orders.do?method=AlipayNotify");// 客户付款后,支付宝调用的页面
    hm.put("out_trade_no", orderNo);// 外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用.
    hm.put("partner", "2088002302055380");// partnerId(合作伙伴ID)
    //hm.put("agent", "2088002302055380");// partnerId(合作伙伴ID)
    hm.put("payment_type", "1");// 支付类型 1=商品购买,2=服务购买,...
    //hm.put("price", "178.00");// 订单金额信息
    hm.put("total_fee", "178.00");// 订单金额和信息
    //hm.put("quantity", "1");// 订单商品数量,一般都是写1,它是按照整个订单包来计算

hm.put(“return_url”, “http://127.0.0.1:8888/mypenguin/orders.do?method=AlipayReturn”);// 客户付款成功后,显示给客户的页面

hm.put("show_url", "http://127.0.0.1:8888/mypenguin/books.do?method=list&kindId=1");//展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。
    hm.put("seller_email", "[email protected]");// 你的支付宝账户email
    hm.put("service", "create_direct_pay_by_user");// create_direct_pay_by_user=直接付款,trade_create_by_buyer=担保付款
    hm.put("subject", "企鹅个性化图书订单号:" + orderNo);// 填写在跳到支付宝页面上显示的付款标题信息
    String payGateway = "https://www.alipay.com/cooperate/gateway.do";// 跳转到支付宝的url头
    String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);
    String sign = makeUrl(hm,securityCode,"utf-8",payGateway);//securityCode(安全码);
    hm.put("sign", sign);
    hm.put("sign_type", "MD5");
    PrintWriter out = response.getWriter();

    out.println("<form name=‘alipaysubmit‘ method=‘post‘  action=‘https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8‘ >");
    out.println("<input type=‘hidden‘ name=‘service‘ value=‘" + hm.get("service") + "‘>");
    out.println("<input type=‘hidden‘ name=‘partner‘ value=‘" + hm.get("partner") + "‘>");
    out.println("<input type=‘hidden‘ name=‘seller_email‘ value=‘" + hm.get("seller_email") + "‘>");

out.println(““);

out.println("<input type=‘hidden‘ name=‘subject‘ value=‘" + hm.get("subject") + "‘>");
    out.println("<input type=‘hidden‘ name=‘body‘ value=‘" + hm.get("body") + "‘>");
    out.println("<input type=‘hidden‘ name=‘total_fee‘ value=‘" + hm.get("total_fee") + "‘>");
    out.println("<input type=‘hidden‘ name=‘show_url‘ value=‘" + hm.get("show_url") + "‘>");
    out.println("<input type=‘hidden‘ name=‘return_url‘ value=‘" + hm.get("return_url") + "‘>");
    out.println("<input type=‘hidden‘ name=‘notify_url‘ value=‘" + hm.get("notify_url") + "‘>");
    out.println("<input type=‘hidden‘ name=‘payment_type‘ value=‘1‘>");
    out.println("<input type=‘hidden‘ name=‘sign‘ value=‘" + hm.get("sign") + "‘>");
    out.println("<input type=‘hidden‘ name=‘sign_type‘ value=‘" + hm.get("sign_type") + "‘>");
    out.println("</form>");
    out.println("<script>");
    out.println("  document.alipaysubmit.submit()");
    out.println("</script>");
    return null;
}

/**

* 根据传入的参数生成Alipay的支付URL
      * @param hm 参数值
      * @param securityCode 安全码
      * @param charset 编码
      * @param payGateway 支付宝gateway
  • @return

    */
     public static String makeUrl(HashMap hm,String securityCode,String charSet,String payGateway) throws Exception{
         List keys = new ArrayList(hm.keySet());
         Collections.sort(keys);//支付宝要求参数必须按字母排序
         StringBuffer content = new StringBuffer();
         for (int i = 0; i < keys.size(); i++) {
             content.append((String) keys.get(i));
             content.append("=");
             content.append((String) hm.get((String) keys.get(i)));
             if (i != keys.size() - 1) {
                 content.append("&");
             }
         }
         content.append(securityCode);
         String sign = DataUtil.MD5Encode(content.toString(), charSet);  //MD5加密
         return sign;
     }

2、return_url的内容:
/**

* 支付宝支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。该页面称作“返回页”,
 * 是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。

*/

public ActionForward AlipayReturn(ActionMapping mapping,
        ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
    //String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
    alipayNotifyURL = alipayNotifyURL+ "&partner=2088002302055380&notify_id="+ request.getParameter("notify_id");
 // 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
    String responseTxt = check(alipayNotifyURL);
    // 获得POST 过来参数设置到新的requestParams中
    Map requestParams = request.getParameterMap();
    List keys = new ArrayList(requestParams.keySet());
    Collections.sort(keys);
    StringBuffer content = new StringBuffer();
    for (int i = 0; i < keys.size(); i++) {
        String key=(String) keys.get(i);
        if(!key.equals("")&&!key.equals("sign")&&!key.equals("sign_type")){
            content.append((String) keys.get(i));
            content.append("=");
            content.append((String)requestParams.get((String) keys.get(i)));
            if (i != keys.size() - 1) {
                content.append("&");
      }
        }
    }
    String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);
    content.append(securityCode);
    String mysign = DataUtil.MD5Encode(content.toString(), "utf-8");
    System.out.println("--------------------------content="+content);
    System.out.println("--------------------------mysign="+mysign);
    System.out.println("--------------------------sign="+request.getParameter("sign"));
      if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true") ){
             if (request.getParameter("trade_status").equalsIgnoreCase("TRADE_FINISHED")){
     // 可以做重定向,也可以用来虚拟物品发货
             }
             return mapping.findForward("payOK");//交易成功
      }else{
          return mapping.findForward("payFail");//交易失败
      }
}

3、notify_url的内容:
/**

* 通知返回URL,仅适用于异步返回处理结果的接口。有些服务是无法立即返回处理结果的,那么需要通过这个URL将处理结果异步返回给合作伙伴

*/

public ActionForward AlipayNotify(ActionMapping mapping,
        ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
    //String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
    alipayNotifyURL = alipayNotifyURL+ "&partner=2088002302055380&notify_id="+ request.getParameter("notify_id");
 // 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
    String responseTxt = check(alipayNotifyURL);
    // 获得POST 过来参数设置到新的requestParams中
    Map requestParams = request.getParameterMap();
    List keys = new ArrayList(requestParams.keySet());
    Collections.sort(keys);
    StringBuffer content = new StringBuffer();
    for (int i = 0; i < keys.size(); i++) {
        String key=(String) keys.get(i);
        if(!key.equals("")&&!key.equals("sign")&&!key.equals("sign_type")){
            content.append((String) keys.get(i));
            content.append("=");

content.append((String)requestParams.get((String) keys.get(i)));

if (i != keys.size() - 1) {
                content.append("&");
            }
        }
    }
    String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);
    content.append(securityCode);
    String mysign = DataUtil.MD5Encode(content.toString(), "utf-8");
    System.out.println("--------------------------content="+content);
    System.out.println("--------------------------mysign="+mysign);
    System.out.println("--------------------------sign="+request.getParameter("sign"));
      if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true") ){
             if (request.getParameter("trade_status").equalsIgnoreCase("TRADE_FINISHED")){
                 // 可以做重定向,也可以用来虚拟物品发货
             }
             return mapping.findForward("payOK");
      }else{
          return mapping.findForward("payFail");
      }
}

/**

  • @param myUrl
    *

    • @param url
      *
    • @return 获取url内容
      */
      public static String check(String urlvalue ) {

    String inputLine = ““;
    try
    {
    URL url = new URL(urlvalue);
    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

    BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

    String stTemp = ““;

    while((stTemp = in.readLine()) != null)
     {
        System.out.println(stTemp);
        inputLine = inputLine + stTemp;
     }

    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    return inputLine;
    }
    代码编写完毕,可以试着debug调试一下

时间: 2024-08-01 11:43:07

java程序支付宝接口付费功能的实现的相关文章

java实现支付宝接口--文档..转载

//实现java支付宝很简单,只要从支付宝官方下载 http://help.alipay.com/support/index_sh.htm下载程序,配置一下参数就OK了: 1.先到http://help.alipay.com/support/index_sh.htm下接口程序,右下角有个"接口资料下载"点击下载进入下载页面http://club.alipay.com/read.php?tid=9976972选择你要下载支付宝的接口类型:我是选择"支付宝即时到账收款接口&quo

支付宝接口程序、文档及解读(ASP.NET)

支付宝接口程序.文档及解读(ASP.NET) 最近需要为网站加入支付宝的充值接口,而目前关于支付宝接口开发的资料比较杂乱,这里就我此次开发所用到的资料进行汇总整理,希望能够帮助需要的朋友. 开发步骤: 1. 确定签约类型 支付宝的接口有多种类型,所以首先你要确定签约的合同类型,确定使用的是哪个接口,不至于走错了道道. 此步骤中,可以参考文档:支付宝接口操作教程 2. 下载开发文档 如果是即时到账的开发,请先下载并仔细阅读:标准快速付款接口文档 文档中比较详细的介绍了逻辑流程,时序图以及枚举定义等

ASP.NET实现支付宝接口功能

最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址: https://b.alipay.com/order/productDetail.htm?productId=2012111200373124&tabId=4#ps-tabinfo-hash 具体如何下载,我就不在罗嗦了-- 很多人反映,用支付宝的接口到最后面会出现验证错误.其实,这里需要对接口程序进行一下改造.需要添加几个自定义函数.为了

ThinkPHP实现支付宝接口功能

最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下:一.下载支付宝接口包 下载地址: https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1 具体如何下载,我就不在罗嗦了-- 很多人反映,用支付宝的接口到最后面会出现验证错误.其实,这里需要对接口程序进行一下改造.需要添加几个自定义函数.为了让大家以后避免出现同样的问题,我把

android应用程序如何调用支付宝接口

最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在更新,可能支付宝那边是为了让接口更容易被调用吧,以前有些老的教程稍微跟现在接口有些不能“对号入座”,于是,我决定抽空写一篇关于调用支付宝接口的文章,跟大家分享,让大家以最快的速度掌握如何调用支付宝接口的方法.如果写的不好,请大家多多指教哦. 不多说了,开写. 1,到支付宝官网,下载支付宝集成开发包,

Android 开发之Android 应用程序如何调用支付宝接口

1.到支付宝官网,下载支付宝集成开发包 由于android设备一般用的都是无线支付,所以我们申请的就是支付宝无线快捷支付接口.下面是申请的地址以及下载接口开发包的网址:https://b.alipay.com/order/productDetail.htm?productId=2014110308141993(如果链接失效,你可以到支付宝官网商家服务模块中找到 快捷支付(无线)这个服务.)  下载集成开发包(http://download.alipay.com/public/api/base/W

35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

  35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和: (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!): (4)编写测试类E,在测试类E的main方法中使用接口回调的形式来测试实现 接口的类. p

JAVA程序 写供别人调用的接口方法的时候 异常应该怎么处理?

要看出现的是哪种异常了.如果是使用某些定义好的函数,并且函数本身会产生异常处理方法一般两种:1.自己用try{}catch(){}语句捕获异常并处理.2.在定义接口的后面写上throw Exception.把异常抛出让使用接口的人处理异常.两种方法都可以.但如果是RuntimeException异常,那就是自己程序某些地方写错了,那你就必须找到并修改程序.JAVA程序 写供别人调用的接口方法的时候 异常应该怎么处理?,布布扣,bubuko.com

Thinkphp集成手机支付宝接口功能

最近做微商城,需要实现手机wap支付功能,选择的是支付宝的接口支付功能.这里是我用的是支付宝“手机网站支付”产品(注:该产品要支付宝企业账号才能申请),具体步骤如下: 一.下载支付宝接口包 https://b.alipay.com/order/productDetail.htm?productId=2013080604609688 二.重新整理接口包文件 下载下来的接口包文件有很多语言的源码 注:openssl用来生成公私钥,RSA签名才使用.这里我们用的MD5签名,所有该文件用不到. 我们选择