`
walksing
  • 浏览: 216949 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

paypal在线支付的通信接口

阅读更多
paypal在线支付的通信接口
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/254565 》 ,谢谢支持!★★★


本篇将讲述与paypal在线支付的通信接口问题:

关于paypal在线支付的信息可以直接访问http://www.paypal.com。paypal作为国际在线支付的一种比较常用的工具,在现在的国际电子商务中使用的非常多,这里将就paypal支付接口与企业自己的网上电子商务系统之间沟通作一详细描述。

一般电子商务系统实现的流程如下:
客户在系统内下订单 -> 将订单的金额信息提交到paypal网站 -> 客户在paypal上付款 -> paypal将客户的付款完成信息发送给电子商务系统 -> 系统收到paypal信息后确定客户订单已经付款 -> 进行发货等后续流程。

从这个流程中可以看到系统与paypal的通信尤其关键,可以实现订单的自动付款确认。




(1)如何调用paypal接口?(将订单的金额信息提交到paypal网站)
Html代码
<%@ page contentType="text/html;charset=UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>goto paypal</title> 
</head> 
<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 
    <form name="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
    <input type="hidden" name="cmd" value="_xclick"> 
    <input type="hidden" name="business" value="paypal@xxx.com"><!--这里填写你的paypal账户email--> 
    <input type="hidden" name="item_name" value="order information"><!--这里填写客户订单的一些相关信息,当客户连到paypal网站付款的时候将看到这些信息--> 
    <input type="hidden" name="amount" value="220.00"><!--订单的总金额信息--> 
    <input type="hidden" name="currency_code" value="USD"><!--订单总金额对应的货币类型 ,客户可以用其他币种来付款,比如这里订单币种是美元USD,客户可以用欧元EUR来付款,由paypal根据当前汇率自动实现币种之间的换算-->    
    <input type="hidden" name="on0" value="customerId"><!-- 自定义的参数1 --> 
    <input type="hidden" name="os0" value="stephen"><!-- 对应上面自定义参数1对应的值 --> 
    <input type="hidden" name="on1" value="address"><!-- 自定义的参数2 --> 
    <input type="hidden" name="os1" value="shanghai china"><!-- 对应上面自定义参数2对应的值 --> 
    <input type="hidden" name="notify_url" value="http://www.xxx.com/notifyurl.jsp?order_id=23876412"><!--这里告诉paypal付款的通信url,即当客户付款后调用这个url通知系统--> 
    <input name="Paypal" type="button" value="Go to Paypal" onclick="javaScript:this.form.submit();"></td> 
    </form> 
</body> 
</html> 

<%@ page contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>goto paypal</title>
</head>
<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
    <form name="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="paypal@xxx.com"><!--这里填写你的paypal账户email-->
<input type="hidden" name="item_name" value="order information"><!--这里填写客户订单的一些相关信息,当客户连到paypal网站付款的时候将看到这些信息-->
<input type="hidden" name="amount" value="220.00"><!--订单的总金额信息-->
<input type="hidden" name="currency_code" value="USD"><!--订单总金额对应的货币类型 ,客户可以用其他币种来付款,比如这里订单币种是美元USD,客户可以用欧元EUR来付款,由paypal根据当前汇率自动实现币种之间的换算--> 
<input type="hidden" name="on0" value="customerId"><!-- 自定义的参数1 -->
<input type="hidden" name="os0" value="stephen"><!-- 对应上面自定义参数1对应的值 -->
<input type="hidden" name="on1" value="address"><!-- 自定义的参数2 -->
<input type="hidden" name="os1" value="shanghai china"><!-- 对应上面自定义参数2对应的值 -->
<input type="hidden" name="notify_url" value="http://www.xxx.com/notifyurl.jsp?order_id=23876412"><!--这里告诉paypal付款的通信url,即当客户付款后调用这个url通知系统-->
    <input name="Paypal" type="button" value="Go to Paypal" onclick="javaScript:this.form.submit();"></td>
    </form>
</body>
</html>

在生成上面的paypal表单时,其中的[cmd],[action],[business],[amount],[currency_code],[notify_url]参数设置绝对不能出错,[cmd]和[action]指定paypaly接口类型,[business]出错,你将收不到客户的付款,[amount]与[currency_code]关系到订单的金额,[notify_url]是系统与paypal的付款通知接口url。

当客户下单后看到上面的页面后,就可以通过设置的按钮[Go to Paypal]连接到paypal.com网站,然后登录并进行付款。

(2)paypay将付款信息返回给系统
当客户付款后,paypal就会自动调用上面表单提供的[notify_url],下面是一个[notifyurl.jsp]的一个例子:
Html代码
<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="com.soft4j.NotifyUrlMgr"%><%  
    String ret = NotifyUrlMgr.insert(request);  
    if(ret==null){out.print("200 OK");}else{out.print("fail");}  
%> 

<%@ page contentType="text/html;charset=UTF-8"%><%@ page import="com.soft4j.NotifyUrlMgr"%><%
String ret = NotifyUrlMgr.insert(request);
if(ret==null){out.print("200 OK");}else{out.print("fail");}
%>

如果确认收到paypal发来的客户付款信息,则返回"200 OK",这样子paypal就知道系统已经收到信息了;否则返回"fail",这样paypal会过一段时间后再次发来。其实,只有当paypal收到"200 OK"的返回信息后才会停止发送付款信息,否则会自动的每隔一段时间就调用上面
的[notify_url]通信接口。

(3)系统处理paypay发来的付款信息

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;  
 
/** 
* paypal付款通知接口. 
*  
* @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();  
 
        //判断paypal付款账户是否正确  
        String business = httpRequest.getParameter("business");  
        if( !"paypal@xxx.com".equals(business) ) {  
            System.out.println("gu:Wrong receive paypal email:"+business);  
            return null;  
        }  
          
        try {  
            String orderId = httpRequest.getParameter("order_id");//订单号  
            if(orderId==null||"".equals(orderId)) orderId="-1";  
            parameterNames = httpRequest.getParameterNames();  
            boolean isPrint = false;  
            while (parameterNames.hasMoreElements()) {//循环收取paypal发来的所有参数信息  
                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 {  
            //  
        }  
    }  
 


/*
* 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;

/**
* paypal付款通知接口.
*
* @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();

        //判断paypal付款账户是否正确
        String business = httpRequest.getParameter("business");
        if( !"paypal@xxx.com".equals(business) ) {
        System.out.println("gu:Wrong receive paypal email:"+business);
        return null;
        }
       
        try {
            String orderId = httpRequest.getParameter("order_id");//订单号
            if(orderId==null||"".equals(orderId)) orderId="-1";
            parameterNames = httpRequest.getParameterNames();
            boolean isPrint = false;
            while (parameterNames.hasMoreElements()) {//循环收取paypal发来的所有参数信息
                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 {
            //
        }
    }

}



这样系统可以自动对客户订单的付款情况进行跟踪,更快捷的进行订单处理。

附录:
[1] paypay允许的币种

AUD Australian Dollar
CAD Canadian Dollar
CHF Swiss Franc
CZK Czech Koruna
DKK Danish Krone
EUR Euro
GBP Pound Sterling
HKD Hong Kong Dollar
HUF Hungarian Forint
JPY Japanese Yen
NOK Norwegian Krone
NZD New Zealand Dollar
PLN Polish Zloty
SEK Swedish Krona
SGD Singapore Dollar
USD U.S. Dollar

[2] paypal付款信息的参数含义:

https://www.paypal.com/IntegrationCenter/ic_ipn-pdt-variable-reference.html


[3] paypal提供的开发api的pdf文档

PP_OrderManagement_IntegrationGuide.pdf.zip [在附件中可以下载]

[4] paypal提交付款所支持的参数及其含义(也就是你提交给paypal中的那个Form表单中需要设置的参数)
https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html

[5] paypal显示页面的语言设置(也就是打开paypal网站的语言)。需要用参数locale.x进行设置,但这个参数在paypal提供的参数表(参见上面[4])中没有的。

Html代码
<form name="paypal" action="https://www.paypal.com/cgi-bin/webscr?locale.x=zh_HK" method="post"> 
...  
</form> 

<form name="paypal" action="https://www.paypal.com/cgi-bin/webscr?locale.x=zh_HK" method="post">
...
</form>
locale.x=zh_HK 繁体中文
locale.x=en_GB 英文

如果你的电子商务系统不是java环境的,也可以参考上面的内容。


























http://dl.iteye.com/topics/download/12b978e8-b2bb-3593-bd63-ebcc7ff0e153
PP_OrderManagement_IntegrationGuide.pdf.zip (1.1 MB) 
分享到:
评论

相关推荐

    java paypal 支付接口代码

    在本文中,我们将深入探讨如何在Java环境中集成PayPal支付接口。PayPal是全球领先的在线支付平台,提供了广泛的服务,包括购物、支付和接收付款。Java开发者可以利用PayPal的API来实现各种支付功能,例如商品购买、...

    springboot 项目 paypal支付接口

    在本项目中,我们主要探讨的是如何在SpringBoot应用程序中集成PayPal支付接口。SpringBoot以其简洁、快速的启动和强大的依赖管理特性,已经成为Java开发者的首选框架之一,尤其适用于构建微服务和快速原型开发。而...

    net中主流在线支付接口文档和示例(包括:Paypal,支付宝,财付通)

    本资源包包含了关于PayPal、支付宝和财付通这三大主流在线支付平台的接口文档和示例代码,这对于.NET开发者来说是非常有价值的参考资料。 1. PayPal API: PayPal是全球领先的在线支付系统,其API提供了多种支付...

    paypal国际支付springboot版本

    本项目“paypal-springboot”旨在演示如何在Spring Boot应用中整合PayPal支付接口,实现安全、高效的跨境支付服务。下面我们将深入探讨相关的技术细节和知识点。 1. **Spring Boot简介** Spring Boot是Spring框架...

    PayPal api & 支付宝API接口开发相关文档实例

    在本文中,我们将深入探讨如何使用PayPal API和支付宝API进行支付接口的开发,主要针对C#编程语言的开发者。这两个支付系统在全球范围内被广泛应用于电子商务和其他在线交易中,为商家提供安全、便捷的支付解决方案...

    paypal php支付demo

    在实施PayPal支付时,必须遵守PayPal的开发者政策和指南,确保用户数据的安全。使用HTTPS进行通信,存储敏感信息时应用加密,这些都是基本的安全措施。 **9. 结合前端** 这个PHP支付Demo通常需要与前端界面配合...

    C# PayPal国际支付接口实现源码DEMO-2017年5月4日

    通过以上分析,我们可以看出这个C# PayPal支付接口DEMO包含了完整的支付流程,从创建支付到处理回调,对于学习和理解如何在C#项目中集成PayPal支付功能非常有帮助。开发者可以参考DEMO中的代码和文档,根据自己的...

    paypal 支付的源代码

    这个源代码可能包含了ASP(Active Server Pages)语言实现的PayPal支付接口,这是一种微软开发的服务器端脚本技术,常用于构建动态网页。下面我们将深入探讨与PayPal支付相关的知识点,以及ASP在实现这些功能时的...

    java实现paypal支付实例,内涵jar

    对于开发人员来说,集成PayPal支付接口到自己的应用或网站是至关重要的。 首先,`paypalrest-api-sdk-1.13.0.jar` 是PayPal官方提供的Java RESTful API SDK,它包含了一系列的类和方法,用于与PayPal的服务器进行...

    pay pal官方支付接口文档

    "PayPal官方支付接口文档"是开发者接入PayPal支付系统的关键参考资料,它详细阐述了如何利用PayPal的服务来处理在线交易。本篇文章将深入探讨该文档中的核心知识点。 1. **NVP(Name-Value Pair)协议**: PayPal...

    .net集成 paypal即时支付

    以下是对".net集成paypal支付 即时支付 PayPal测试成功示例"这个主题的详细说明。 首先,集成PayPal到.NET应用程序通常涉及到以下几个关键步骤: 1. **注册PayPal开发者账号**:在开始集成之前,你需要在PayPal...

    paypal 快速支付 .net demo

    综上所述,这个.NET Demo为开发者提供了一个快速集成PayPal支付功能的起点,涵盖了从创建支付请求到处理支付结果的整个流程。开发者可以通过研究和修改这个Demo,根据自己的应用需求进行定制化开发。对于.NET开发者...

    paypal 支付源码(Java)

    本主题将深入探讨如何使用Java实现PayPal支付接口。Java作为一种多平台支持的编程语言,非常适合构建这样的应用程序。 首先,`JavaNVPCodeGenerate`这个文件名暗示了我们可能在处理PayPal的NVP(Name-Value Pair)...

    PayPal移动支付解决方案

    API则提供了与PayPal服务器通信的接口,处理支付请求、验证交易等操作。 2. **集成流程**:集成PayPal移动支付通常包括以下几个步骤:注册开发者账户、获取API凭据、配置应用程序、集成SDK、构建支付流程、处理支付...

    paypal 代码示例,API接口, java PHP

    在IT行业中,尤其是电商和互联网应用开发中,集成PayPal支付接口是常见的需求。本资料包提供的是关于PayPal的代码示例,主要针对Java和PHP开发者,包括API接口的使用以及具体的演示案例。 首先,让我们深入了解...

    支付接口免申请

    1. **支付接口**:支付接口是商家与支付平台之间的一个通信桥梁,用于处理在线交易,包括用户支付、订单处理、退款等操作。常见的支付接口有支付宝、微信支付、PayPal等。 2. **免申请流程**:传统的支付接口申请...

    手机网页支付接口技术Demo

    - **支付协议和标准**:如PCI DSS(Payment Card Industry Data Security Standard)安全标准,以及不同支付网关(如PayPal、Alipay、WeChat Pay)的API规范。 - **请求和响应处理**:如何构造支付请求参数,以及...

    PayPal php

    3. **重定向用户**:使用`SetExpressCheckout`(NVP)或`CreatePayment`(REST)API,生成一个PayPal支付页面的URL,让用户完成支付流程。 4. **处理支付结果**:用户在PayPal页面完成支付后,会被重定向回网站的回...

    paypal 支付

    在IT行业中,PayPal是一种广泛使用的在线支付系统,它允许用户进行安全、便捷的电子交易。本文将深入探讨如何实现PayPal的登录功能以及在上传内容后获取订单详情。 首先,PayPal登录涉及的主要知识点包括: 1. **...

Global site tag (gtag.js) - Google Analytics