paypal在线支付的通信接口问题!

paypal_Charles paypal_Charles 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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>
在生成上面的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环境的,也可以参考上面的内容。
...全文

相关推荐

【雷达信号处理】数字下变频(DDC)(Matlab代码实现)

内容概要:本文介绍了基于MATLAB的雷达信号处理中数字下变频(DDC)技术的实现方法,重点阐述了DDC在雷达接收机前端信号处理中的关键作用。通过将高频回波信号下变频至基带,便于后续进行数字化处理与目标信息提取。文中提供了完整的MATLAB代码实现,涵盖混频、低通滤波、抽取等核心步骤,帮助读者理解DDC的工作原理与工程实现细节。; 适合人群:具备一定信号与系统、数字信号处理基础知识,从事雷达、通信或电子工程相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于教学演示,加深对数字下变频原理的理解;②作为雷达或通信系统仿真项目的基础模块;③辅助科研人员快速搭建信号处理链路,进行算法验证与性能分析。; 阅读建议:建议结合数字信号处理教材中的混频、奈奎斯特采样及多速率信号处理理论进行学习,动手运行并调试代码,尝试调整参数(如本振频率、滤波器阶数、抽取因子)以观察对输出信号的影响,从而深入掌握DDC的设计要点与实际应用。

小念念_

福建省福州新区矢量面数据-02坐标-geojson格式.json

福州新区区划面数据,geojson格式,02坐标

samLi0620

量化数据笔记第2篇:外盘期货历史高频tick数据涵盖主流交易所的活跃合约,以逐笔成交记录为主 字段通常包含品种代码、交易所、日期、精确到毫秒的时间戳、成交价格、成交量、持仓量变化,以及盘口买卖一档挂单

量化数据笔记第2篇:外盘期货历史高频tick数据涵盖主流交易所的活跃合约,以逐笔成交记录为主。字段通常包含品种代码、交易所、日期、精确到毫秒的时间戳、成交价格、成交量、持仓量变化,以及盘口买卖一档挂单价与挂单量。数据保留了原始行情序列,反映微观价格变动与流动性瞬时变化。 数据源:CMES金融数据库

cmes_love

【多机器人路径规划】基于优先级规划与Petri网融合的多机器人路径规划框架研究(Matlab代码实现)

内容概要:本文提出了一种基于优先级规划与Petri网融合的多机器人路径规划框架,旨在解决多机器人系统在共享环境中进行路径规划时可能出现的冲突与死锁问题。该方法结合了优先级规划的高效性与Petri网在建模并发与冲突方面的优势,通过建立形式化的Petri网模型对机器人运动状态进行精确描述,并引入优先级机制动态调整路径执行顺序,从而实现无冲突、无死锁的安全路径规划。研究通过Matlab代码实现了算法仿真,验证了该框架在复杂网格环境下的可行性与有效性,能够有效提升多机器人系统的运行效率与安全性。 适合人群:具备一定自动化、机器人或控制理论基础的科研人员,以及从事智能物流、智能制造、多智能体系统等相关方向的研究生与工程技术人员。 使用场景及目标:①应用于仓储机器人、AGV调度、自动化码头等多移动机器人协同作业场景;②解决多机器人路径规划中的死锁预防、冲突消解与资源竞争问题;③为开发高效、可靠的多智能体路径规划系统提供理论支持与实现参考。 阅读建议:此资源以Matlab代码实现为核心,建议读者在理解Petri网基本原理和优先级调度机制的基础上,结合提供的代码进行仿真实验,通过调整优先级规则与网络结构,深入掌握算法的设计思路与优化方法。

荔枝科研社

碰碰炸挤黑单机游戏,好玩

碰碰炸挤黑单机游戏,好玩

塔◎
评论 2
收藏 已收藏
分享
返回顶部
paypal_Charles
移动支付 1,170 成员 378 内容