`
lghjbxc
  • 浏览: 5889 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何实现支付宝功能

    博客分类:
  • jase
 
阅读更多
国内电子商务系统实现的基本流程如下:
客户在系统内下订单 -> 系统根据订单生成支付宝接口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 传值) 实现支付宝功能

    在.NET和C#环境下,通过Ajax技术实现实现支付宝支付功能是现代Web应用程序中的常见需求。这涉及到异步通信、接口调用以及第三方支付平台的API集成。以下将详细讲解这个过程涉及的关键知识点: 1. **Ajax技术**:...

    java项目加入支付宝功能

    在Java项目中集成支付宝功能,主要是为了让用户能够方便地进行在线支付。这涉及到的主要知识点包括:支付宝API的调用、签名算法、回调处理以及异常处理等。以下将详细阐述这些内容。 1. **支付宝API调用**:支付宝...

    支付宝转账demo-实现提现功能

    总之,支付宝转账Demo是一个实用的工具,通过它你可以快速了解和实现支付宝的提现功能。但在实际应用中,还需要根据业务场景和安全策略进行适当的调整和优化。希望这个Demo能对你有所帮助,并激发你在支付领域更多的...

    SSM实现支付宝支付功能

    在本项目中,我们将讨论如何利用SSM框架集成支付宝支付功能,为用户提供安全便捷的在线支付体验。 首先,我们需要了解支付宝提供的API接口。支付宝开放平台提供了丰富的SDK和文档,涵盖了从订单创建、支付通知到...

    最炫的购物车的支付宝功能

    首先,我们从“android源码”这一标签出发,理解在Android开发中实现支付宝功能的基本步骤。这通常包括以下几个部分: 1. **集成SDK**:下载并集成支付宝官方提供的Android SDK,这是实现支付宝支付功能的基础。SDK...

    Django实现支付宝付款和微信支付的示例代码

    本文将向您展示如何使用Django框架来实现支付宝支付和微信支付功能,并提供示例代码以供参考。 首先,要实现支付宝支付,开发者需要在蚂蚁金服开放平台上注册账号,创建应用并配置相关的API密钥。这一过程称为...

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

    本文主要介绍了Java后台实现支付宝支付接口和支付宝订单查询接口的详细过程,旨在帮助开发者快速实现支付宝支付功能。 一、申请公司企业账号并开通应用 首先,需要在支付宝官网申请公司企业账号,并开通一个应用。...

    支付宝功能开发视频

    支付宝功能开发视频,讲述的是支付宝交易java开发的视频,生成支付订单进行交易

    支付宝源代码

    【支付宝源代码】是支付宝平台的核心技术组成部分,它包含了实现支付宝功能的各种程序代码,这些代码是支付宝能够提供安全、高效支付服务的基础。源代码是软件开发的基石,它揭示了软件内部的工作机制,对于理解...

    NodeJS+Vue实现支付宝支付(沙箱)完整流程 .zip

    通过以上步骤,我们完成了NodeJS+Vue实现支付宝支付的沙箱环境下的完整流程。这个过程中,不仅涉及到了前后端的交互,还涵盖了第三方支付平台的接入,对于提升开发者在实际项目中的综合能力非常有帮助。在实际生产...

    ThinkPHP实现支付宝接口功能

    分享个ThinkPHP 3.2.3最新版本整理支付宝类,支付宝接口相信很多人都开发过,但要在框架中自己去整合还是需要时间的,为了减少大家的时间,我把个整合好的支付宝类分享给大家。 注:ThinkPHP使用最新版本才能使用哈...

    支付宝支付功能实现-Android

    在Android平台上实现支付宝支付功能是移动应用开发中的一个重要环节,特别是在电商、服务预订等领域。本文将详细介绍如何在Android应用中集成支付宝SDK,实现安全、便捷的支付体验。 首先,我们需要了解的是支付宝...

    java实现支付宝支付功能

    java实现支付宝支付功能小demo

    C# ASP.NET实现“支付宝”在线支付功能

     一个C# ASP.NET 在线付款模块 - 实现“支付宝”在线支付功能,电子商务类、企业产品类等众多网站目前都需要的功能。相关说明:支付宝的网关,用户注册支付宝时生成的校验码(必须填写自己的),用户注册支付宝时...

    java实现支付宝退款功能

    "Java 实现支付宝退款功能" Java 实现支付宝退款功能是指通过 Java 语言调用支付宝的退款接口,实现退款的功能。这个功能主要是为了帮助开发者快速地实现支付宝退款功能,提高开发效率和节省时间。 在 Java 实现...

    支付宝demo,放在vender目录下

    通过研究`AopSdk.php`了解核心接口,查看`version.txt`跟踪版本,探索`aop`目录获取示例代码,以及理解`lotusphp_runtime`中的框架集成,开发者能够有效地实现支付宝功能,并将其无缝地整合到自己的应用中。...

    实现支付宝支付功能.rar

    综上所述,实现支付宝支付功能涉及了支付宝开放平台API的调用、Maven的依赖管理、Spring Boot的应用构建以及安全策略等多个方面的知识。通过以上步骤,我们可以为用户提供一个安全、高效的支付体验。

    RecyclerView进阶使用-实现仿支付宝菜单编辑页面拖拽功能

    RecyclerView进阶使用-实现仿支付宝菜单编辑页面拖拽功能,详细的说明在http://blog.csdn.net/cjs1534717040/article/details/78459821,有积分的给个积分,没积分的给我发邮件,发帖不易,谢谢支持 没积分的,可以看...

    SpringBoot实现的支付宝当面付充值系统源码.zip

    SpringBoot实现的支付宝当面付充值系统(可用于网站充值,游戏内充)

Global site tag (gtag.js) - Google Analytics