关于JAVA支付宝接口

Java调用支付宝支付接口 这是一个简单的java调用支付宝支付接口的例子,代码较为原始,采用jsp+servlet模式,可根据业务场景项目框架稍做更改。应用环境:沙箱(入驻开发不需要营业执照,但正式线上不可使用,下载沙箱支付宝进行测试),pc端支付(手机端略有不同)前期工作:配置好沙箱环境(官方文档),关于私钥,公钥,以及验证算法等名词详见官方文档,下载沙箱板支付宝app,官方会提供一个测试账号。案例结构:        ... 阅读详情
网上关于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", "monicali_7766@sina.com");// 你的支付宝账户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("<input type='hidden' name='out_trade_no' value='" + hm.get("out_trade_no") + "'>");
        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;
}


参考网址:http://www.j2bb.com/trac/discussion/23/953
Java对接支付宝支付接口 在Java中对接支付宝支付接口,通常需要使用支付宝提供的开放平台API。 阅读详情

相关推荐

Java支付宝支付接口对接(app端)

前言:大致说一下流程,其实支付宝官方文档写的很清楚了,还有就是下面我写的一些描述可能转载了其他博客的内容。 用户在app端提交订单--->选择支付方式即支付宝付款(调用了商家端的付款接口,调用之后会返回一个订单信息)----> app端调用支付宝接口支付和返回的那个订单信息进行比对----->支付成功后,异步通知商家端支付成功(调用了了一个回调接口) 一、支付宝支付流程: ...

杀神Jack的博客 7357

Java接入支付宝支付功能(APP支付)

Java对接支付宝实现APP支付和异步回调处理

LaoRenYuHai_的博客 4581

java调用支付宝下单接口

引入依赖 <!-- 支付宝支付所需接口 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency&gt

m0_48293117的博客 729

后端---史上最全最小白最简单最细致的Java接入支付宝支付接口方法

昨天Boss在讲项目的业务需求的时候对我突然说让我做一下支付宝微信支付接口这块功能,我的心里是充满问号的????,但是我的嘴却坚定的说出了没问题!!!                                       ????????  于是开启了我这一天的快乐之旅,在这个无情又寒冷的深夜里将我今天的快乐分享给大家!  哈哈哈哈哈哈,不扯了,我们开始正题!  正题 每天早上起来...

Nagile-zhou博客 9847

支付宝支付接口

里面提供源码,操作手册,工具以及搭建流程。初学者可能需要花点时间.

Java支付宝支付接口实现

Java实现对支付宝即时到账接口调用。

Javaweb超详细实现模拟支付宝扫码支付

2.创建好的项目添加web框架支持如图选择确定在项目结构中配置有关信息右键创建classes文件夹与lib文件夹如图此处找到刚才的项目的classes路径设置在依赖中设置lib路径的设置找到刚才的lib路径选择此选项结束项目结构中模块的设置3.在项目结构中找到库导入当前项目的路径选择classes选择确定在右面找到本地tomcat的目录,导入servlet-api包接下来我们配置tomcat,在运行里编辑配置添加配置。

Kagari123的博客 7285

支付宝Js接口示例

支付宝网页应用JavaScript接口1.0版本示例代码。

JavaWeb网站对接支付宝接口(商家版超详细!)

本文主要介绍如何将自己编写的JAVAWeb项目能使用支付宝付款,每个步骤超详细,不懂怎么弄的朋友可以看看(附有代码)

weixin_61908530的博客 3696

支付宝支付接口java调用

详细代码说明使用java接入支付宝完成支付的步骤,让你一目了然,少走弯路

支付宝接口开发官方实例(JAVA版)

支付宝接口开发官方实例(包含标准双接口、及时付款等接口)java版

java接入支付宝支付接口沙箱环境测试(傻瓜式,有手就行版本)

一、开始前说明 1、这就是测试一个虚拟环境的支付,只调用了一个简单的API,并不复杂也不高大上,但是很有意思 2、简单高效,参考官方 3、Windows环境,手机APP支付,服务端接口 4、适用任何版本 一、下载工具 (1)工具一:支付宝开放平台开发助手下载 到支付宝开放平台官网,选择网络&移动应用,点击了解更多 电脑上安装,图标是这样的 (2)工具二:客户端调试 手机上安装 (3)工具三:进入沙箱环境,下载安装沙箱支付宝,就上面那个 安装到手机 二、准备一个基本的Maven项目 (1)

JavadeSon的博客 3203

AI漫剧实战:MiniMaxH3本地部署+ComfyUI工作流,6G显存出长视频

随着AI视频生成技术的普及,创作者开始追求在有限硬件条件下的本地化部署。本地部署不仅降低使用成本,更能获得对生成流程的完全可控性,这为高频次的内容生产提供了基础。以开源工作流引擎ComfyUI为依托,通过量化模型与显存优化,即便是6G显存的中端显卡也能流畅运行MiniMaxH3视频生成模型,输出60秒级别的AI漫剧片段。本文从视频生成原理出发,讲解模型选择、节点搭建、参数调优与提示词结构化设计,并延伸到剧本拆分、角色一致性控制、后期合成及平台变现路径,为AI漫剧创作者提供一套低成本、可复制的工程化方案。无论

weixin_29051149的博客 158

java接入支付宝接口包含源码

本文为本人原创文章,未经本人允许不得转载。博主含有支付宝扫码支付跟启动支付宝app两种支付java源码,如有需要可以加博主qq:3063715971(15RBM 帮助你实现支付功能) 如今不少项目都需要接入支付功能,比如租房网站,销售网站等,那么我们就得熟悉支付宝的java接口。 首先我们需要在蚂蚁金服开放平台获取,你应用所需要的APPID,秘钥跟公钥,测试用的沙箱账...

baidu_36652220的博客 7839

泛微ecology9二次开发-附件上传-安全实践

本文深入探讨了泛微ecology9二次开发中附件上传功能的安全实践。针对原生接口的安全机制,文章提出了同源部署与服务端代理转发两大核心策略,并提供了基于Vue3和Element Plus的完整前端实现代码,重点解决了会话验证、权限控制及文件关联等关键安全问题,确保二次开发应用能安全、稳定地与ecology9系统集成。

qsc9012345的博客 530

Arduino IDE 开发ESP32-S3编译报错 Sketch too big?一步步解决!

解决方法很简单,只需要一步步来修改 Arduino IDE 的配置即可。确保你已经打开 Arduino IDE 并加载了你的 ESP32 代码。如果你也遇到了这个问题,按这个方法试试,应该就能顺利搞定!,如果你需要 OTA,就不能选这个方案,需要换成。,但我回头一想,我这块 ESP32-S3 可是。,按理说存储空间应该足够啊,那这到底是咋回事?,默认方案就装不下了,这时就需要选择更大的。按钮,这次应该不会报错了!,然后在下拉菜单中找到。,可以支持更大的固件。如果你的固件体积超过。,就能正常编译上传。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2133

java实现支付宝接口---支付

java实现实现支付宝接口 蚂蚁沙箱环境 (Beta) 是协助开发者进行接口功能开发及主要功能联调的辅助环境。可以模拟实现支付宝的支付功能。 接下的实现技术是运用到springmvc注解方法实现的支付。 文章目录java实现实现支付宝接口准备工作java代码实现支付支付宝沙箱支付的官方文档 准备工作 去支付宝开放平台,用你的支付登录开通沙箱支付的服务。支付宝开放平台 点击右上角的立即入...

weixin_45003796的博客 5252

5G/NR SSB学习总结

6.1 SSB概念 同步信号和PBCH块(Synchronization Signal and PBCH block, 简称SSB),它由主同步信号(Primary Synchronization Signals, 简称PSS)、辅同步信号(Secondary Synchronization Signals, 简称SSS)、PBCH三部分共同组成。 6.2 SSB特征 ...

欢迎来到小七的博客,这里将带你深入探索5G通信的神秘世界。无论你是通信领域的专业人士还是对这一领域充满好奇心的技术爱好者,这里都有专业协议解读、通信知识普及以及有趣的Python编程内容等你发现。 8万+

java后台实现支付宝支付接口、支付宝订单查询接口 前端为APP

https://blog.youkuaiyun.com/Ouyzc/article/details/79551714 java后台实现支付宝支付接口、支付宝订单查询接口 前端为APP        最近项目APP需要接入微信、支付宝支付功能,在分配开发任务时,听说微信支付接口比支付宝支付接口要难实现,由于我开发经验不是那么丰富(现工作经验1年半)且未接触过支付接口开发,组里刚好又有支付接口的老司机,所以很...

awangwu的博客 1万+

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1109

opencv案例实战——银行卡模式匹配识别

在之前的几篇文章中我们已经介绍了opencv的一些基础知识,本篇文章我们将结合一个案例运用之前的知识并且学习opencv中模式匹配的应用,用到的知识点如果有不清楚的可以查看上面列出来的系列文章。具体代码会放在最后。

艾醒的博客 1337

支付宝接口 java_JAVA调用支付宝的直充接口

[java]代码库JAVA调用支付宝的直充接口原理和银联接口一样,当商家和支付宝签好协议后就可以问支付宝的人要相关的代码了。我本地用的是支付宝UTF-8编码的代码,先把util里的东西达成一个alipay.jar文件。然后编写我们自己的调用和响应代码:1.封装支付宝需要的接口数据@Description("会员中心资金帐户支付宝充值")@CreatedInfo(creator="hamano"...

weixin_34191685的博客 1363

在时间轴上联动多张内表:ABAP 的 PROVIDE ... ENDPROVIDE 区间联动迭代实战

PROVIDE 是 ABAP 中处理有效期区间数据的强大工具,它能自动将多张内表按时间维度切片并联合处理。其核心功能包括:指定区间边界字段(BOUNDS),定义外部总区间(BETWEEN),并通过工作区和标志位(VALID)标识每张表在当前子区间是否生效。该语法特别适合 HR 信息类型等有效期数据,能避免手动处理区间重叠、排序和空档等问题。使用时需注意字段投影(FIELDS)限制、工作区只读原则,以及异常处理(如区间重叠或未排序)。典型应用场景包括员工调岗记录、价格有效期管理等需要时间轴联动的业务逻辑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1668

支付宝退款接口(java)

查看支付宝退款文档:https://doc.open.alipay.com/docs/api.htm?spm=a219a.7629065.0.0.PbaltX&apiId=759&docType=4 官方文档写的很详细了,按照文档修改一下参数调试一下就可以,错误大多出现在参数上面。 看完公共请求参数和请求参数后,便看一下请求实例,把请求实例复制黏贴一下到自己代码中: 请求参数上面显示

天天都在进步的博客 1万+

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

基于 transformer、lstm、LSTM多特征的交通流量预测 完整数据代码 超全项目 本科硕士毕设卓卓有余

4655

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

下一篇: Android SDK 2.2 开发环境详解
RuanJava
博客等级 码龄17年 13粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值