国内电子商务系统实现的基本流程如下:
客户在系统内下订单 -> 系统根据订单生成支付宝接口url -> 客户通过url使用支付宝(网上银行)付款 -> 支付宝将客户的付款完成信息发送给电子商务系统 -> 系统收到支付宝信息后确定客户订单已经付款 -> 进行发货等后续流程。
在开始下面的内容之前,你要先有一个支付宝账户,如果要集成支付宝接口,你还必须申请开通服务(关于如何开通,可以直接到支付宝网站上申请).在服务开通后,支付宝会给你2个字符串编号:1个partnerId(合作伙伴ID),还有1个securityCode(安全码).当你拿到这2个码的时候就可以开始下面的内容了.
(1)如何调用支付宝接口?(将客户的订单信息按照既定的规则生成一个url跳转到支付宝网站)
通过下面方法[makeOrderAlipayUrl(HttpServletRequest httpRequest,Order order)]的调用得到支付宝的url,然后进行跳转(response.sendRedirect(url);).
Java代码
•/** • * 根据订单生成支付宝接口URL. • * @param httpRequest • * @param order 订单实例 • * @return • * @throws Exception • */ • public static String makeOrderAlipayUrl(HttpServletRequest httpRequest,Order order) throws Exception { • HashMap hm = new HashMap(); • hm.put("_input_charset",httpRequest.getCharacterEncoding());//采用相同的编码方式 • hm.put("body","您在www.xxx.com上的订单");//填写在跳到支付宝页面上显示的付款内容信息 • hm.put("discount","-5");//填写折扣信息 -5表示抵扣5元 • hm.put("logistics_fee","10");//物流费用 • hm.put("logistics_payment","BUYER_PAY");//物流费用支付人 BUYER_PAY=买家支付物流费用 • hm.put("logistics_type","EXPRESS");//物流方式 • hm.put("notify_url","http://www.xxx.com/notifyurl.jsp");//客户付款后,支付宝调用的页面 • hm.put("out_trade_no",order.getId());//外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用. • hm.put("partner",partnerId);//partnerId(合作伙伴ID) • hm.put("agent",partnerId);//partnerId(合作伙伴ID) • hm.put("payment_type","1");//支付类型 1=商品购买,2=服务购买,... • hm.put("price","105.30");//订单金额信息 • hm.put("quantity","1");//订单商品数量,一般都是写1,它是按照整个订单包来计算 • hm.put("return_url","http://www.xxx.com/ReturnUrl.jsp");//客户付款成功后,显示给客户的页面 • hm.put("seller_email","alipay@xxx.com");//你的支付宝账户email • hm.put("service","create_direct_pay_by_user");//create_direct_pay_by_user=直接付款,trade_create_by_buyer 担保付款 • hm.put("subject","www.xxx.com的订单");//填写在跳到支付宝页面上显示的付款标题信息 • String payGateway = "https://www.alipay.com/cooperate/gateway.do?";//跳转到支付宝的url头 • return makeUrl(hm,securityCode,httpRequest.getCharacterEncoding(),payGateway);//securityCode(安全码) • } •
•
• /** • * 根据传入的参数生成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 = md5(content.toString(),charset); • content.delete(0,content.length()); • content.append(payGateway); • for (int i = 0; i < keys.size(); i++) { • content.append(keys.get(i)); • content.append("="); • content.append(URLEncoder.encode((String) hm.get(keys.get(i)), charset)); • content.append("&"); • } • content.append("&sign_type=MD5"); • keys.clear(); • keys = null; • return content.toString(); • } •
• /** • * 生成md5编码字符串. • * @param str 源字符串 • * @param charset 编码方式 • * @return • * • */ • public static String md5(String str,String charset) { • if (str == null) • return null; • char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', • 'a', 'b', 'c', 'd', 'e', 'f' }; •
• MessageDigest md5MessageDigest = null; • byte[] md5Bytes = null; • char md5Chars[] = null; • byte[] strBytes = null; • try { • strBytes = str.getBytes(charset); • md5MessageDigest = MessageDigest.getInstance("MD5"); • md5MessageDigest.update(strBytes); • md5Bytes = md5MessageDigest.digest(); • int j = md5Bytes.length; • md5Chars = new char[j * 2]; • int k = 0; • for (int i = 0; i < j; i++) { • byte md5Byte = md5Bytes; • md5Chars[k++] = hexDigits[md5Byte >>> 4 & 0xf]; • md5Chars[k++] = hexDigits[md5Byte & 0xf]; • } • return new String(md5Chars); • } catch (NoSuchAlgorithmException e) { • //Log.output(e.toString(), Log.STD_ERR); • return null; • } catch (UnsupportedEncodingException e) { • //Log.output(e.toString(), Log.STD_ERR); • return null; • } finally { • md5MessageDigest = null; • strBytes = null; • md5Bytes = null; • } • }
当客户通过接口url付款后,支付宝会自动的去调用前面提供的[notify_url]参数中的url.
(2)支付宝将付款信息返回给系统
当客户付款后,支付宝就会自动调用上面表单提供的[notify_url],下面是一个[notifyurl.jsp]的一个例子:
Java代码
•<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="com.soft4j.AlipayMgr"%><% • String ret = AlipayMgr.insert(request); • if(ret==null){ • out.print("success");//成功接收支付宝发来的付款信息 • }else{ • out.print("fail");//出错 • } •%> 如果确认收到支付宝发来的客户付款信息,则返回"success",这样子支付宝就知道系统已经收到信息了;否则返回"fail",这样支付宝会过一段时间后再次发来。其实,只有当支付宝收到"success"的返回信息后才会停止发送付款信息,否则会自动的每隔一段时间就调用上面
的[notify_url]通信接口。
(3)系统处理支付宝发来的付款信息
Java代码
•/* • * Created on 2005-6-12 • * Author stephen • * Email zhoujianqiang AT gmail DOT com • * CopyRight(C)2005-2008 , All rights reserved. • */ •package com.soft4j; •
•import java.sql.Connection; •import java.sql.SQLException; •import java.util.Enumeration; •import java.util.Vector; •import javax.servlet.http.HttpServletRequest; •
•/** • * 支付宝付款通知接口. • * • * @author stephen • * @version 1.0.0 • */ •public final class NotifyUrlMgr { •
•
• public static String insert(HttpServletRequest httpRequest) { •
• //定义变量和进行必要的初始化工作 • Enumeration parameterNames = null; • String parameterName = null; • String parameterValue = null; • int count = 0; • Vector[] params = null; • Vector vParameterName = new Vector(); • Vector vParameterValue = new Vector(); •
• try { • String orderId = httpRequest.getParameter("out_trade_no");//订单号 • if(orderId==null||"".equals(orderId)) orderId="-1"; • parameterNames = httpRequest.getParameterNames(); • boolean isPrint = false; • while (parameterNames.hasMoreElements()) {//循环收取支付宝发来的所有参数信息 • parameterName = (String) parameterNames.nextElement(); • parameterValue = httpRequest.getParameter(parameterName); • if(parameterValue==null) parameterValue=""; • vParameterName.add(parameterName); • vParameterValue.add(parameterValue); • count++; • } •
• //这里添加对收到信息的处理:一般是将这些信息存入数据库,然后对客户的订单进行处理. •
• return null; • } catch (Exception e) { • return e.toString(); • } finally { • // • } • } •
•} 这样系统可以在客户使用支付宝付款后,自动的根据支付宝发来的付款信息确认客户的付款情况,并进行相应的后续操作.
评论这张
转发至微博
转发至微博
分享到:
相关推荐
实现支付宝功能
在.NET和C#环境下,通过Ajax技术实现实现支付宝支付功能是现代Web应用程序中的常见需求。这涉及到异步通信、接口调用以及第三方支付平台的API集成。以下将详细讲解这个过程涉及的关键知识点: 1. **Ajax技术**:...
在Java项目中集成支付宝功能,主要是为了让用户能够方便地进行在线支付。这涉及到的主要知识点包括:支付宝API的调用、签名算法、回调处理以及异常处理等。以下将详细阐述这些内容。 1. **支付宝API调用**:支付宝...
总之,支付宝转账Demo是一个实用的工具,通过它你可以快速了解和实现支付宝的提现功能。但在实际应用中,还需要根据业务场景和安全策略进行适当的调整和优化。希望这个Demo能对你有所帮助,并激发你在支付领域更多的...
在本项目中,我们将讨论如何利用SSM框架集成支付宝支付功能,为用户提供安全便捷的在线支付体验。 首先,我们需要了解支付宝提供的API接口。支付宝开放平台提供了丰富的SDK和文档,涵盖了从订单创建、支付通知到...
首先,我们从“android源码”这一标签出发,理解在Android开发中实现支付宝功能的基本步骤。这通常包括以下几个部分: 1. **集成SDK**:下载并集成支付宝官方提供的Android SDK,这是实现支付宝支付功能的基础。SDK...
本文将向您展示如何使用Django框架来实现支付宝支付和微信支付功能,并提供示例代码以供参考。 首先,要实现支付宝支付,开发者需要在蚂蚁金服开放平台上注册账号,创建应用并配置相关的API密钥。这一过程称为...
本文主要介绍了Java后台实现支付宝支付接口和支付宝订单查询接口的详细过程,旨在帮助开发者快速实现支付宝支付功能。 一、申请公司企业账号并开通应用 首先,需要在支付宝官网申请公司企业账号,并开通一个应用。...
支付宝功能开发视频,讲述的是支付宝交易java开发的视频,生成支付订单进行交易
【支付宝源代码】是支付宝平台的核心技术组成部分,它包含了实现支付宝功能的各种程序代码,这些代码是支付宝能够提供安全、高效支付服务的基础。源代码是软件开发的基石,它揭示了软件内部的工作机制,对于理解...
分享个ThinkPHP 3.2.3最新版本整理支付宝类,支付宝接口相信很多人都开发过,但要在框架中自己去整合还是需要时间的,为了减少大家的时间,我把个整合好的支付宝类分享给大家。 注:ThinkPHP使用最新版本才能使用哈...
在Android平台上实现支付宝支付功能是移动应用开发中的一个重要环节,特别是在电商、服务预订等领域。本文将详细介绍如何在Android应用中集成支付宝SDK,实现安全、便捷的支付体验。 首先,我们需要了解的是支付宝...
java实现支付宝支付功能小demo
通过以上步骤,我们完成了NodeJS+Vue实现支付宝支付的沙箱环境下的完整流程。这个过程中,不仅涉及到了前后端的交互,还涵盖了第三方支付平台的接入,对于提升开发者在实际项目中的综合能力非常有帮助。在实际生产...
一个C# ASP.NET 在线付款模块 - 实现“支付宝”在线支付功能,电子商务类、企业产品类等众多网站目前都需要的功能。相关说明:支付宝的网关,用户注册支付宝时生成的校验码(必须填写自己的),用户注册支付宝时...
"Java 实现支付宝退款功能" Java 实现支付宝退款功能是指通过 Java 语言调用支付宝的退款接口,实现退款的功能。这个功能主要是为了帮助开发者快速地实现支付宝退款功能,提高开发效率和节省时间。 在 Java 实现...
通过研究`AopSdk.php`了解核心接口,查看`version.txt`跟踪版本,探索`aop`目录获取示例代码,以及理解`lotusphp_runtime`中的框架集成,开发者能够有效地实现支付宝功能,并将其无缝地整合到自己的应用中。...
综上所述,实现支付宝支付功能涉及了支付宝开放平台API的调用、Maven的依赖管理、Spring Boot的应用构建以及安全策略等多个方面的知识。通过以上步骤,我们可以为用户提供一个安全、高效的支付体验。
RecyclerView进阶使用-实现仿支付宝菜单编辑页面拖拽功能,详细的说明在http://blog.csdn.net/cjs1534717040/article/details/78459821,有积分的给个积分,没积分的给我发邮件,发帖不易,谢谢支持 没积分的,可以看...
SpringBoot实现的支付宝当面付充值系统(可用于网站充值,游戏内充)