手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:div

转:Paypal IPN接口开发小结

之所以转载这篇文章,不是因为他实现了多少代码,而是说文章中会有一些遇到的问题和解决方法。
前一段时间也做了alipay和tenpay的接口编码,其实说白了这些东西都差不多。只是因为这篇文章中说的是https接口,会有点不太一样。
alipay和tenpay最终都是跳转到对方的网站上做进一步的支付的,paypal可能不太一样(没仔细折腾过,所以才要转这篇)

上原文:http://shiningray.cn/paypal-ipn.html

最近终于搞定了该死的Paypal ipn,特地在此留下点东西备忘。
所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这些数据进行操作。
但代码的调试是一件很痛苦的事情,因为作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了Sandbox给开发人员进行开发,首先到https://developer.paypal.com/ 注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这 种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录 Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少)。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击 Edit按钮,打开IPN,这里如果你使用的是固定的IPN Handle,可以直接将地址填入。
接下来,我们测试的时候,应该将Paypal接口的地址设置为https://www.sandbox.paypal.com/cgi-bin/webscr
最后基本的流程为:

  • 用户在我们的网站上选择商品、放入购物车,然后检查准备支付
  • 网站根据购物车中的商品,生成Paypal的支付表单(也是提交到上面IPN用的Paypal接口地址),包含了此次交易的一些信息(下次会专门找机会解释一下)。并在自己的数据库中生成一张订单记录。
  • Paypal在Session中记录下这些交易信息
  • 用户用Paypal账户登录Paypal(Sandbox用Sandbox的虚拟帐号),复查明细,点击Pay按钮
  • Paypal进行交易处理,如果我们的Paypal收款帐号在接受帐款上没有什么问题(没有特别的需要在界面上“Accept”的地方),交易完成,那么Paypal会发送一个IPN,并发送提示邮件。
  • 我们IPN Handler接受到信息,首先向Paypal进行校验,如果信息正确,然后根据信息和自己数据库中进行比对,如果无误,可以将支付信息保存,并修改订单状态。
  • 然后Paypal会显示一个界面表示交易完成,此时如果用户点击“Return”按钮,Paypal会将用户送回我们网站指定地点。
  • 我们网站迎接用户回来,向用户表示感谢,并进行提醒,给出订单号等等。

整个流程基本如下,不过其中有很多要注意的地方:

  1. 我们看到了,接口地址是https开头的,也就是要求使用SSL进行连接, 其实Paypal Sandbox可以使用http,但是最后实际的Paypal接口,不支持http协议,所以如果你用PHP写IPN Handler脚本的话,在验证信息的代码部分,如果简简单单使用fopen、HTTP_Request之类的工具是没用的,PHP的socks库不支持SSL,应该使用curl,有两种方法,一个是使用PHP扩展中的libcurl,Paypal官方发布的SDK中便是使用的这个方法,但Paypal的SDK非常复杂,如果想自己写,可以使用Snoopy,一个简单实用的PHP请求库(它自己说是模拟了浏览器的行为),而它使用的是Curl的可执行文件,通过管道获得结果,而非php的libcurl,所以自己cURL的主页上下载一个支持SSL的编译版本,可能还需要安装OpenSSL,不过对于Linux系统,可能应该会都带。
  2. 在支付表单中,可以自己设置notify_url字段,来指定此次交易的信息应该发送到哪个地方,这样就可以覆盖在Profile中我们的设置,另外,这个字段要进行urlencode
  3. 我们得到的IPN信息中,status对应的便是交易状态,如Complete表示完成,首字母大写,而验证结果则是VERIFIEY或者INVALID,全部大写,具体的内容,可以查看Paypal官方的文档订单管理整合指南

--EOF--
文章虽老,但值得参考一下。

Tags: paypal, payment

经典游戏在线玩

经典游戏网上也可以在线玩了。。。
看看这个:http://www.ponged.com/actiongames/streetfighter2championedition-4113
晕啊。
对了,看 到flash右侧上方那个红灯不?
按一下,有奇怪的现象发生哦。。。确实很强,有创意,哈哈

我的旺斯卡创意

看到本文的朋友,请帮忙在http://wsk.alisoft.com/crs/wcc/personal!list.jspa?uid=5651165为我投上一票,谢谢

 

目前,在使用旺旺时,只有一个聊天窗口。

在右侧店主头像旁边有一个推荐图标,显示的是店主网店内的一些推荐商品。

事实上,这些是肯定不够的,所以我认为可以有几个小方法来加强用户体验

1、在聊天对话框的最右侧,即黑名单旁,增加一个“店铺推荐”。点击后,在聊天记录框上层推出一个DIV层浮在上面

     如果用户是点击商品与该店主联系,点击此按钮时,则显示访商品所在分类的其他商品。如果是直接在店铺首页点击旺旺与店主聊天,则显示该店铺的推荐(也就是用户信息旁边那个五角星按钮的功能)。

    理由:用户除非是目的性很强的购买,否则,都是在犹豫,有这个功能,可能会促进商品的成交率

2、在聊天对话框的最右侧,即黑名单旁,增加一个“商品对比”

    如果用户是点击商品与店主联系,点击按钮时,弹出同类商品的对比价?或者弹出该商品与一些类似商品的列表,由用户选择进行对比(但这个功能,可能会使得用户购买行为失败。。。)

3、临时群(可以显示在商品页,也可以显示在旺旺上)

    用户在购买某商品时,如果该商品已经有很多人购买,则可以使得用户点击“临时群”功能,与曾经购买过该商品的人进行聊天(随机安排),一来可以了解商品的性能,二来也可以聊聊商家的信誉等

    优点是方便了购买者对于商品性能和价格的确认,对于商家的历史行为也会有所了解

    缺点是1.容易被马甲所引导。2.曾经购买过的用户不一定愿意与他人分享这种经验,是否会认为侵犯隐私?

4、好友排序、限制分类

   旺旺在添加好友时,应该对分类的个数进行限制,这对用户来说,就相当于让他们对自己的好友进行合理的归类。虽然限制了分类,可能让一些用户不满意,但同时好友排序功能,又能让他们可以更方便的与好友联系(现在的排序只是自然排序,按名称或者按时间,在线的排在不在线的前面),未来设定好友排序后,我可以把在某个分类里经常联系的放在首位(可能会适合商家对经常在本店购物的用户适时的推送信息)

5、合理推送信息

    用户如果设置某个店铺为关注或者收藏,那么该店主有权利适时的推送信息(或者由用户订阅该店铺的RSS?)

6、分类RSS(订阅RSS)

    这个就可能有点象51job了,用户购买前,肯定会在淘宝上拼命的搜索,在设定一些固定搜索条件后,例如:品名、分类、价格排序规则、商品地区、商家等级后,生成RSS,由旺旺来订阅。等到购买商品后,再清除订阅。

    可以很方便的使用户了解该商品的最新信息。。。

随便谈了谈这些想法,希望有用。

 

 

Tags: 创意

如何用DIV挡住SWF?

div在网页显示的时候,一般情况下都是被FLASH挡住,如何用div挡住flash呢?有一个小办法。。

由于现在flash在网页上显示大多用了swfObject的JS,因此,我也就拿它来举例:

 

XML/HTML代码
  1. <div id="flashContent">对不起,你的浏览器不支持flash</div>  
  2. <script>  
  3. var fso = new SWFObject("aaa.swf", "test", "100%", "100%", "8", "#FFFFFF");   
  4. //重点在这里   
  5. fso.addParam("wmode","opaque");   
  6. fso.write("flashContent");   
  7. </scirpt>  
  8. <div style="position:absolute;left:15;top:15;width:130px;height:30px;background:white"></div>  

即,先给flash加上一个参数wmode,值为opaque,然后通过用DIV的绝对路径加上背景色来挡住flash,比如一个角,等等

Tags: div, flash