发表于 2016-11-01 08:00:44 by 月小升
HTML部分
ipn部分,回调地址,验证是否是合法的paypal支付,而不是冒牌的
$v) { $postdata .= $i.'='.rawurlencode($v).'&'; } $postdata .= 'cmd=_notify-validate';//cmd=_notify-validate $web = parse_url($url); if ($web['scheme'] == 'https') { $web['port'] = 443; $ssl = 'ssl://'; } else { $web['port'] = 80; $ssl = ''; } $fp = @fsockopen($ssl.$web['host'], $web['port'], $errnum, $errstr, 30); if (!$fp) { echo $errnum.': '.$errstr; } else { fputs($fp, "POST ".$web['path']." HTTP/1.1\r\n"); fputs($fp, "Host: ".$web['host']."\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ".strlen($postdata)."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $postdata . "\r\n\r\n"); while(!feof($fp)) { $info[] = @fgets($fp, 1024); } fclose($fp); $info = implode(',', $info); writeover("a.txt",$postdata."-----".$info."\r\n","a+"); exit; if (strstr('VERIFIED', $info)) { writeover("a.txt","YES\r\n","a+"); // yes valid, f.e. change pay;ment status } else { writeover("a.txt","NO\r\n","a+"); // invalid, log error or something } } ?>
如果正确返回的字符
HTTP/1.1 200 OK ,Date: Tue, 01 Nov 2016 06:50:17 GMT ,Server: Apache ,X-Frame-Options: SAMEORIGIN ,Set-Cookie: c9MWDuvPtT9GIMyPc3jwol1VSlO=HaxVMeL7cFfG8_x4cSnt-dIcQvLnxLKIFks2vawbgKQuOm5t8zrmGkYJ5RGgQfdFMm2Ndo9eIiCGvPrEAlG2oet7MPOm9MMJyDWNimo3siqOgpbg-oGVDv_W1_YnBPfzaghvBlj7qflLi1HxXrY4glbyn2VkSVKROoge40fS5kUIE5RuinIEa_iPzm4lClpe5UCP5h-CpMNl2BoWPsB-VsyKtv5_LLVjYnuAPvhQoaRVBaifDjlvPKrDAVl_DSeO1_Gd1cD2Gw-C1a-Ub5bHrF1C1fnY0hyBfzP9DKSguCL_j9x5xc0C8yDxfTgqMIl_iieUx9Qj-ychZsCG5E8jEMdc91TFU2esw9dROw2-YbeydfBQi43DKRnIwZCVbeGXzmn-ixayobpHg-mL5WiM-kJhVV8RuH2LuhpJp0; domain=.paypal.com; path=/; Secure; HttpOnly ,Set-Cookie: cookie_check=yes; expires=Fri, 30-Oct-2026 06:50:18 GMT; domain=.paypal.com; path=/; Secure; HttpOnly ,Set-Cookie: navcmd=_notify-validate; domain=.paypal.com; path=/; Secure; HttpOnly ,Set-Cookie: navlns=0.0; expires=Thu, 01-Nov-2018 06:50:18 GMT; domain=.paypal.com; path=/; Secure; HttpOnly ,Set-Cookie: Apache=10.72.108.11.1477983018000098; path=/; expires=Thu, 25-Oct-46 06:50:17 GMT ,Vary: Accept-Encoding,User-Agent ,Connection: close ,HTTP_X_PP_AZ_LOCATOR: sandbox.slc ,Paypal-Debug-Id: e4d72a48eed18 ,Set-Cookie: X-PP-SILOVER=name%3DSANDBOX3.WEB.1%26silo_version%3D1880%26app%3Dappdispatcher%26TIME%3D691738712%26HTTP_X_PP_AZ_LOCATOR%3Dsandbox.slc; Expires=Tue, 01 Nov 2016 07:20:18 GMT; domain=.paypal.com; path=/; Secure; HttpOnly ,Set-Cookie: X-PP-SILOVER=; Expires=Thu, 01 Jan 1970 00:00:01 GMT ,Strict-Transport-Security: max-age=14400 ,Transfer-Encoding: chunked ,Content-Type: text/html; charset=UTF-8 , ,8 ,VERIFIED ,0 , OK
VERIFIED,看到这个就对了。
class.php里的函数
/* ‘r’ 只读方式打开,将文件指针指向文件头。 ‘r+’ 读写方式打开,将文件指针指向文件头。 ‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 ‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 ‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 ‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 */ function writeover($filename,$data,$method="rb+",$iflock=1) { @touch($filename);/*文件不存在则创建之.可以采用file_exists验证并其他创建文件函数代替.测试结果效率相当*/ $handle=@fopen($filename,$method); if($iflock){ flock($handle,LOCK_EX); } fwrite($handle,$data); if($method=="rb+") ftruncate($handle,strlen($data)); fclose($handle); }
多商品提交html到paypal
paypal支付时候的可用变量
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 客户夜间联系电话号码前三位
day_phone_a 客户白天联系电话号码的区号
day_phone_b 客户白天联系电话号码前三位
提示:若要更改”用户信息”中的默认运费和手续费设置,请转至您的用户信息,编辑您的运费计算,然后点击”允许采用基于交易的运费”复选框。
将单个物品传递给PayPal
如果您的第三方购物车可设置成向PayPal传递单个物品,有关物品的信息将加入买家和卖家的记录日志和系统通知中。要加入该物品的信息,您需要将 HTML 格式元素粘贴至PayPal购物车流程的新版本。该过程与 #1 节"将总购物车数量传递给PayPal"描述的非常相似,不同之处在于:
将 "cmd" 变量设置到 "_cart"
更换必要的 HTML 行
与
添加称为 “upload” 的新变量
在 <表格> 和 标签之间新增以下行:
定义物品明细
对于以下各特定物品参数,定义与通过您的合作商购物车购买的各物品对应的一组新值。将 “_x” 附加到变量名称,其中 x 是物品号码,从 1 开始,每加入一物品增加一。
item_name_x (物品 #x 需要)购物车中物品 #x 的名称。必须是字母数字字符,最多为 127 个字符
item_number_x 与购物车中物品 #x 关联的可选传递变量。必须是字母数字字符,最多为 127 个字符
amount_x (物品 #x 需要)物品 #x 的价格
shipping_x 运送物品 #x 的第一件(数量 1)的成本
shipping2_x 每增加一件运送物品 #x(数量 2 或更多)所需的运送成本
handling_x 物品 #x 的处理成本
on0_x 物品 #x 的第一选项栏名称。最多 64 个字符
os0_x 物品 #x 的第一组选项值。最多 200 个字符。”on0_x” 必须定义,以便识别 “os0_x”。
on1_x 物品 #x 的第二选项栏名称。最多 64 个字符
os1_x 物品 #x 的第二组选项值。最多 200 个字符。”on1_x” 必须定义,以便识别 “os1_x”。
为购物车中每件物品重复此设定
为您的买家购物车中的各物品加入以上表格中的一组必需的变量和任何选项变量。购物车中的第一物品必须用以 “_1″ 结束的参数定义,如 “item_name_1″、”amount_1″ 等。同样,第二物品应用变量 “item_name_2″、”amount_2″ 等命名。提示:”_x” 值必须以一为单位按序递增,以便识别。如果从 item #1 跳到 item #3 而不定义 item #2,则第三个物品会被忽略。
要指定币种:所有货币变量(金额、运费、运费 2、手续费、税款)将以粘贴在付款上的 “currency_code” 变量指定的币种显示。因为其不是随物品不同的,无需向变量名称附加 “_x”。如果没有粘贴 “currency_code” 变量,我们将假定所有货币变量值为美元。
You must be logged in to post a comment.