ホームページ > php教程 > php手册 > PayPal決済インターフェースのPHP開発手法を分析する

PayPal決済インターフェースのPHP開発手法を分析する

WBOY
リリース: 2016-06-21 08:55:57
オリジナル
747 人が閲覧しました

申请PayPal注册网址:https://www.paypal.com/

paypal接口与其它接口有些不同,稍微复杂一点。 其实银行接口也算是一个站点的插件。

所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal 的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这 些数据进行操作。

开设Sandbox帐号

但代码的调试是一件很痛苦的事情,因为作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了Sandbox给 开发人员进行开发,首先到https://developer.paypal.com/注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这 种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录 Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少 920-203 920-533 )。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击Edit按钮,打开IPN,这里如果你使用 的是固定的IPN Handle,可以直接将地址填入。

接下来,我们测试的时候,应该将Paypal接口的地址设置为https://www.sandbox.paypal.com/cgi-bin/webscr

基本的流程

当客户向您付款时,PayPal将向位于指定 URL (type=”hidden” name=”notify_url” value=” “)的服务器发送一个通知。此通知中将包括您的客户的所有付款信息(例如,客户名称、金额),以及一段加密代码。当服务器收到通知时,它随后会将该信息 (包括加密代码)发送回安全的PayPal URL。PayPal将通过检查加密字符串对交易进行身份验证。这种将 IPN 数据传回PayPal的操作防止了“欺骗”,因此您可以确保 IPN 来自PayPal。在进行验证时,PayPal会将其合法性的确认信息发送回您的服务器。

提示:要启用即时付款通知,您将需要输入一个 URL,通过它您可以接收到来自您的用户信息的通知。

启用了即时付款通知后,每次当您接收付款时您的服务器都会收到一个通知,此通知将以隐藏的“FORM POST”的方式发送到指定的 URL,并将包括所有付款信息。此页面的底部列出了通知的 FORM 变量。

每次收到来自PayPal的 IPN 时,您必须在实施订单之前完成如下所述的通知确认过程。确认列出的信息将可确保交易合法。

通知确认IPN

为了确保付款已进入您的PayPal账户,您必须验证用作“receiver_email”的电子邮件地址是否已在您的PayPal账户中注册并得到确认。

服务器收到即时付款通知后,您将需要通过构建一个发送到PayPal的 HTTP POST 对其进行确认。您的 POST 应发送到https://www.paypal.com/cgi-bin/webscr

您必须完全按照收到表单变量时的原样发送所有收到的表单变量。您还需要将一个值为“_notify-validate”的名为“cmd”变量(例如,cmd=_notify-validate)附加到 POST 字符串。

PayPal将回复该 POST,并在回复的正文中包含一个单词“VERIFIED”或“INVALID”。当您收到 VERIFIED 回复时,您需要在实施订单之前执行若干检查:

确认“payment_status”为“Completed”,因为系统也会为其他结果(如“Pending”或“Failed”)发送 IPN。

检查“txn_id”是否未重复,以防止欺诈者重复使用旧的已完成的交易。

验证“receiver_email”是已在您的PayPal账户中注册的电子邮件地址,以防止将付款发送到欺诈者的账户 。

检查其他交易详情(如物品号和价格),以确认价格未改变完成了以上检查后,您可以使用 IPN 数据更新您的数据库,并处理购物。

如果收到“无效”通知,则应将其视为可疑通知,并应对其进行调查。

主要参数:

向PayPal提交粘贴代码时,应包括以下 4 个隐藏变量及一张图片,这就是说,您粘贴到PayPal的最短必需代码应如下:

<form action="https://www.paypal.com/row/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_xclick"> // "_xclick" 立即购买

<input type="hidden" name="business" value="you@youremail.com">
//PayPal账户上的电子邮件地址

<input type="hidden" name="item_name" value="Item Name">
//物品名称(或购物车名称)

<input type="hidden" name="currency_code" value="USD">
//定义币种以标示货币变量 值可以为 "USD"、"EUR"、"GBP"、"CAD"、"JPY"。

<input type="hidden" name="amount" value="0.00">
//物品的价格(购物车中所有物品的总价格,因为是_Xclick模式)
<input type="image"
src="http://www.paypal.com/zh_XC/i/btn/x-click-but01.
gif"
name="submit" alt="请使用PayPal付款!">

form>

可用变量

business 您的PayPal账户上的电子邮件地址

quantity 物品数量。大于 1 时,会与金额相乘

item_name 物品名称(或购物车名称)。必须是字母数字字符,最多为 127 个字符

item_number 用于跟踪付款的可选传递变量。必须是字母数字字符,最多为 127 个字符

amount 物品的价格(购物车中所有物品的总价格)

shipping 该物品的运送成本

shipping2 每增加一件物品所需的运送成本

handling 手续费

tax 基于交易的税额。如果使用该变量,传递值将覆盖所有用户信息税收设置(不管买家所在位置)。

no_shipping 送货地址。如果设为 "1",则不会要求您的客户提供送货地址。该变量为可选项;如果省略或设为 "0",将提示您的客户输入送货地址

cn 可选标签,会在提示栏上显示(最多 40 个字符)

no_note 为付款加入提示。如果设为 "1",则不会提示您的客户输入提示。该变量为可选项;如果省略或设为 "0",将提示您的客户输入提示。

on0 第一选项栏名称。最多 64 个字符

os0 第一组选项值。最多 200 个字符。"on0" 必须定义,以便识别 "os0"。

on1 第二选项栏名称。最多 64 个字符

os1 第二组选项值。最多 200 个字符。"on1" 必须定义,以便识别 "os1"。

custom 决不会向您的客户显示的可选转递变量。可用于跟踪存货

invoice 决不会向您的客户显示的可选转递变量。可用于跟踪账单号

notify_url 仅与 IPN 一起使用。发送 IPN Form Post 的互联网 URL

return 您的客户完成付款后将返回的互联网 URL

cancel_return 您的客户取消付款后将返回的互联网 URL

image_url 您要用作图标的图片的互联网 URL,图片大小为 150 X 50 像素

cs 设置您的付款页面的背景色。如果设为 "1",背景色将为黑色。该变量为可选项;如果省略或设为 "0",背景色将为白色

扩展变量

PayPal 允许您粘贴扩展变量,条件是将改变以下 "cmd" 值:

到:

通过上述 “cmd” 值修改,您还可使用以下变量:

扩展变量

email 客户的电子邮件地址

first_name 客户的名。必须是字母数字字符,最多为 32 个字符

last_name 客户的姓。必须是字母数字字符,最多为 64 个字符

address1 客户地址所在国家或地区。必须是字母数字字符,最多为 100 个字符

address2 客户地址第二行。必须是字母数字字符,最多为 100 个字符

city 客户地址所在城市。必须是字母数字字符,最多为 100 个字符

state 客户地址所在州。必须是正式的 2 个字母缩写

zip 客户地址的邮政编码

night_phone_a 顧客の夜間連絡先電話番号の市外局番

night_phone_b お客様の夜間連絡先電話番号の上 3 桁

day_phone_a 顧客の日中の連絡先電話番号の市外局番

day_phone_b お客様の日中の連絡先電話番号の最初の 3 桁

ヒント: ユーザー情報でデフォルトの配送と手数料の設定を変更するには、ユーザー情報に移動し、配送計算を編集して、[トランザクションベースの配送を許可する] チェックボックスをクリックします。

個々のアイテムを PayPal に転送する

サードパーティのショッピング カートが個々のアイテムを PayPal に渡すように設定できる場合、アイテムに関する情報が購入者と販売者のログとシステム通知に追加されます。このアイテムの情報を含めるには、HTML 書式設定要素を PayPal ショッピング カート プロセスの新しいバージョンに貼り付ける必要があります。このプロセスは、セクション #1「カートの合計数量を PayPal に渡す」で説明したプロセスと非常に似ていますが、次の例外があります:

「cmd」変数を「_cart」に設定します

必要な HTML 行を置き換えます

「upload」という新しい変数を追加します

タグの間に次の行を追加します。

アイテムの詳細を定義します

以下の各商品固有のパラメーターについて、パートナーのショッピング カートを通じて購入された各商品に対応する新しい値のセットを定義します。変数名に「_x」を追加します。x は項目番号で、1 から始まり、追加される項目ごとに 1 ずつ増加します。

item_name_x (アイテム #x に必須) カート内のアイテム #x の名前。最大 127 文字の英数字である必要があります

item_number_x カート内のアイテム #x に関連付けられたオプションのパススルー変数。最大 127 文字の英数字である必要があります

amount_x (アイテム #x に必要) アイテム #x の価格

shipping_x 品目 #x の最初のユニット (数量 1) の出荷コスト

shipping2_x 追加アイテム #x が発送されるごとにかかる送料 (数量 2 以上)

品目 #x の処理にかかる handle_x コスト

on0_x 項目 #x の最初のオプション列名。最大 64 文字

os0_x 項目 #x のオプション値の最初のセット。最大 200 文字。 「os0_x」を認識するには「on0_x」を定義する必要があります。

on1_x 項目 #x の 2 番目のオプション列名。最大 64 文字

os1_x 項目 #x のオプション値の 2 番目のセット。最大 200 文字。 「os1_x」を認識するには「on1_x」を定義する必要があります。

カート内の各アイテムに対してこれを繰り返します

購入者のカート内の各商品について、上の表から必須の変数とオプション変数のセットを追加します。ショッピング カート内の最初の商品は、「item_name_1」、「amount_1」など、「_1」で終わるパラメーターを使用して定義する必要があります。同様に、2 番目の項目には変数「item_name_2」、「amount_2」などを使用して名前を付ける必要があります。ヒント: 認識されるためには、「_x」値が 1 つずつ増加する必要があります。項目 #2 を定義せずに項目 #1 から項目 #3 にジャンプすると、3 番目の項目は無視されます。

通貨を指定するには: すべての通貨変数 (金額、送料、送料 2、手数料、税金) は、支払いに貼り付けられた "currency_code" 変数で指定された通貨で表示されます。項目固有ではないため、変数名に「_x」を付ける必要はありません。 「currency_code」変数が貼り付けられていない場合は、すべての通貨変数値が USD であると想定されます。

上記は、この記事で紹介されている、PHP を使用して PayPal 支払いインターフェイスを開発するための主な手順です。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート