http://stephen830.iteye.com/blog/274072

★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/274072 》 ,谢谢支持!★★★

以前曾经写过一篇关于《paypal在线支付的通信接口 http://stephen830.iteye.com/blog/254565 》的文章。对以前文章的一个补充:

自从国际paypal增加了繁体中文的WEB版本后,许多早先集成paypal接口的系统,当国外客户通过系统进入paypal的在线支付界面, 往往会打开繁体中文的页面,而不是以前的英文页面,导致国外客户面对的是一堆的乱码(国外客户一般不会安装繁体中文)。虽然在paypal页面上可以手动 的切换语言(UK English/繁体中文)。

这一切或多或少给国外客户的使用带来了不便,为此需要完善原来的paypal接口来解决这个小问题。寻遍paypal提供的api接口都没有找到相关的语言设置参数。因此在研究了paypal网站的html代码后,在原来的接口中增加了一个新的参数就解决了上面的问题。

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

locale.x=zh_HK 繁体中文
locale.x=en_GB 英文(UK English)

http://stephen830.iteye.com/blog/254565

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

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

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

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

(1)如何调用paypal接口?(将订单的金额信息提交到paypal网站)

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

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

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

Java代码  
  1. /*
  2. * Created on 2005-6-12
  3. * Author stephen
  4. * Email zhoujianqiang AT gmail DOT com
  5. * CopyRight(C)2005-2008 , All rights reserved.
  6. */
  7. package com.soft4j;
  8. import java.sql.Connection;
  9. import java.sql.SQLException;
  10. import java.util.Enumeration;
  11. import java.util.Vector;
  12. import javax.servlet.http.HttpServletRequest;
  13. /**
  14. * paypal付款通知接口.
  15. *
  16. * @author stephen
  17. * @version 1.0.0
  18. */
  19. public final class NotifyUrlMgr {
  20. public static String insert(HttpServletRequest httpRequest) {
  21. //定义变量和进行必要的初始化工作
  22. Enumeration parameterNames = null;
  23. String parameterName = null;
  24. String parameterValue = null;
  25. int count = 0;
  26. Vector[] params = null;
  27. Vector vParameterName = new Vector();
  28. Vector vParameterValue = new Vector();
  29. //判断paypal付款账户是否正确
  30. String business = httpRequest.getParameter("business");
  31. if( !"paypal@xxx.com".equals(business) ) {
  32. System.out.println("gu:Wrong receive paypal email:"+business);
  33. return null;
  34. }
  35. try {
  36. String orderId = httpRequest.getParameter("order_id");//订单号
  37. if(orderId==null||"".equals(orderId)) orderId="-1";
  38. parameterNames = httpRequest.getParameterNames();
  39. boolean isPrint = false;
  40. while (parameterNames.hasMoreElements()) {//循环收取paypal发来的所有参数信息
  41. parameterName = (String) parameterNames.nextElement();
  42. parameterValue = httpRequest.getParameter(parameterName);
  43. if(parameterValue==null) parameterValue="";
  44. vParameterName.add(parameterName);
  45. vParameterValue.add(parameterValue);
  46. count++;
  47. }
  48. //这里添加对收到信息的处理:一般是将这些信息存入数据库,然后对客户的订单进行处理.
  49. return null;
  50. } catch (Exception e) {
  51. return e.toString();
  52. } finally {
  53. //
  54. }
  55. }
  56. }

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

附录:
[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代码  
  1. <form name="paypal" action="https://www.paypal.com/cgi-bin/webscr?locale.x=zh_HK" method="post">
  2. ...
  3. </form>

locale.x=zh_HK 繁体中文
locale.x=en_GB 英文

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

[label][转载][paypal]paypal在线支付接口的WEB语言设置的更多相关文章

  1. php支付宝在线支付接口开发教程【转】

    php支付宝在线支付接口开发教程 这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   1.什么是第三方支付 所谓第三方支付,就是一些和各 ...

  2. 在线支付接口之PHP支付宝接口开发简单介绍

    php100:92:在线支付接口之PHP支付宝接口开发 支付接口一般是第三方提供的代收款.付款的平台,可以通过支付接口帮助企业或个人利用一切可以使用的支付方式.常见支付平台:支付宝.快钱.云网支付.财 ...

  3. 国付宝ecshop,shopex,shopnc在线支付接口,php版本支付接口开发

    最近应一个客户的要求,给他的一个ecshop商城开发国付宝在线支付接口.国付宝估计大家比较陌生,但是他集成了很多银行的一些网银接口,所以比较方便.号称国家级的第三方支付平台.最近有增加了域名验证,就是 ...

  4. 在线支付接口之PHP支付宝接口开发

    支付接口一般是第三方提供的代收款.付款的平台,可以通过支付接口帮助企业或个人利用一切可以使用的支付方式.常见支付平台:支付宝.快钱.云网支付.财付通. 支付宝页面:订单页面.状态页面.返回页面.--- ...

  5. 银盛支付ecshop,shopex,shopnc在线支付接口,php版本支付接口开发

    最近应一个客户的要求,给他的一个ecshop商城开发银盛支付在线支付接口.银盛支付服务股份有限公司(简称银盛支付)成立于2009年7月,总注册资本14000万元人民币,员工队伍持续壮大.2011年5月 ...

  6. php最新微信扫码在线支付接口。ecshop和shopex,shopnc下完美无错

    最近为客户的一个在线商城做了一个微信扫码在线支付的接口.跟大家分享一下. 1 首先可以模仿其他的接口,比如支付宝,财付通等的接口,构建模块功能文件和语言文件.2 微信提供2种扫码方式,大家可以根据自己 ...

  7. 工行ICBC_WAPB_B2C支付接口

    一. 前期准备 手机银行(WAP)B2C在线支付接口说明V1.0.0.6.doc 手机银行移动生活商户及门户网站js接口API.doc 支付组件ICBCEBankUtil.dll和infosecapi ...

  8. 最详细的 paypal 支付接口开发--Java版

    做全球性的支付,选用paypal!为什么选择paypal? 因为paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台.买家只需知道你的paypal账号,即可在 ...

  9. 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

    开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...

随机推荐

  1. maven下载源代码,中文注释乱码的处理方法

    通过maven下载的源码,如果有注释是中文的话,一般会有乱码问题,解决办法如下: Window -> Preferences -> Content Types -> Text -&g ...

  2. PHP常用获取文件路径的函数集合整理

    转自: http://blog.sina.com.cn/s/blog_71ed1b870102vslg.html 我们在开发PHP项目过程中,经常会用到包含文件,所以有时候需要获取文件的相对路径或者绝 ...

  3. String..lastIndexOf(".") 返回-1的思考

    String s = tableName.substring(tableName.lastIndexOf(".") + 1); 如果有tableName有'.',那么返回正确的截取 ...

  4. Office 2016激活教程(附KMS激活软件)

    首先下载office 2016办公软件文件名:cn_office_professional_plus_2016_x86_x64_dvd_6969182.isoSHA1:277926A41B472EE3 ...

  5. PHP调用Linux的命令行执行文件压缩命令&&创建文件夹修改权限

    一开始,我和普通青年一样,想到用PHP内置的 ZipArchive纠结的是环境上没安装zip扩展,想采用用PHP调用Linux的命令行 ,执行压缩命令,感兴趣的朋友可以了解下,希望本文对你有所帮助 前 ...

  6. SpringBoot入门篇--使用IDEA创建一个SpringBoot项目

    随着技术的更新对于开发速度的追求,我们越来越不能忍受的是Spring框架对于集成开发以后大量的配置问题.所以SprigBoot应运而生,SpringBoot框架其实就是在Spring框架的外边包裹上了 ...

  7. linux-ububtu64位安装docker,及基本命令

    安装:貌似只支持64位 sudo apt-get install docker sudo apt-get install docker.io sudo apt-get install docker-r ...

  8. ES6系列_10之Symbol在对象中的作用

    在ES5中 对象属性名都是字符串,这容易造成属性名的冲突,比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突,于是 ES6 引入 ...

  9. asp.net利用QQ邮箱发送邮件,关键在于开启pop并设置授权码为发送密码

    public static bool SendEmail(string mailTo, string mailSubject, string mailContent)        {         ...

  10. JavaWeb--过滤器Filter (一)

    过滤器是在服务器上运行的,并且位于请求和响应中间起过滤功能的程序.其工作原理如下图所示:   在与过滤器相关联俄Servlet或JSP运行前,过滤器先执行.一个过滤器可以一个或多个Servlet或JS ...