花了几天研究了下google checkout的api实现,这里说下心得经验。
1。什么是google checkout
是google推出的一个支付网关,类似国内的快钱等,目前支持visa,mastercard,以及还有两张不认识的卡。。。付钱时必须要求是其中之一的卡。想体验的可以去picasa或者gmail升级空间就可以看到google的支付方式是他自己的checkout了。另外,这个东东目前不支持中国的(RMB)消费。
基本流程:
买家到网上用信用卡支付
卖家的google checkout单子中会出现一条新记录,此时order stage为reviewing,2分钟左右不能chargeable,此时google在验证信用卡是否可用
状态改变,chargeable,
卖家点击收钱(charge),状态变为charging
收钱成功,状态变为charged
卖家发货(如果需要的话,我是没用到。。)
2。使用前期准备
首先要注册两个帐号,在一个用于支付,一个用于收钱(即商家),这两个都用做测试用。
http://sandbox.google.com/checkout 创建付钱的帐号
http://sandbox.google.com/checkout/sell/ 创建商家收钱的帐号
注,以上这都是在sandbox中做的,即测试用的,如果正式使用需要到checkbox.google.com上注册,帐号可以不一样。
创建过程详见http://code.google.com/intl/zh-CN/apis/checkout/developer/index.html#integration_overview
之后,在http://code.google.com/intl/zh-CN/apis/checkout/samplecode.html 下载示例代码。然后可正式开工。
3。嵌入网站
以PHP为例,可以参考demo下的cartdemo.php。主要是通过2个类来实现购物车,即GoogleCart和GoogleItem。然后通过$cart把item加进去,最后用cart类的成员函数CheckoutButtonCode()输出按钮,给用户提交。当然这是最简单的方法。
这里遇到个问题,在提交之后到google的订单确认页面,但是因为用的中文的关系,在这个页面显示出乱码。由此发现似乎是google示例代码中的一点小错误。在gc_XMLBuilder类中,使用htmlentities函数时,由于默认第3个参数charset 是ISO-8859-1的,造成UTF-8的中文处理有错,主要是货物名以及货物的描述。直接给函数加上第3个参数,值为UTF-8即可,或者多加个类的属性也可,具体看自己的程序了。
另外使用时还可以随意点,并不是必须用他的html代码,提交给google只需cart和signature参数即可
cart=base64_encode($cart->GetXML())
signature=base64_encode($cart->CalcHmacSha1($cart->GetXML())
之后就可以提交付钱了。付钱就用之前申请的测试付钱帐号。
4。回调函数api
那如何知道用户已经付钱,订单状况呢。google有设置回调函数的url。具体位置在,登录到卖家的帐号(sandbox.google.com/checkout),点选my sales->settings->Integration。有个API callback URL,写上你用来处理google返回信息的url地址。下面有对应的选项可以设,注意,如果选上Require notification acknowledgments to specify the serial number of the notification. 那么sample code里需要自己加上serial-number,在googleresponse类,加上个属性serial_number(这个值要自己设),并且在190行左右,具体:
否则会报握手失败。调试信息可以在my sales->tools>Integration Console看到。最容易出的错就是目录的写权限,因为要写日志,以及serial-number问题(settings中构选的话)。
之后还有包括发送订单状态更改(不用每次卖家都进到google用手点),直接收钱。需要Post数据到google,值得注意的是google示例代码中用的是curl,需要系统上带有curl7以上的版本。