使用google checkout经验

花了几天研究了下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行左右,具体:

  1.     function SendAck($die=true) {
  2.       $this->SendOKStatus();     
  3.       $acknowledgment = "/"1.0/" encoding=/"UTF-8/"?>" .
  4.                         "/"" .
  5.                         $this->schema_url . "/" serial-number=/"".$this->serial_number."/" />";
  6.       $this->log->LogResponse($acknowledgment);
  7.       if($die) {
  8.         die($acknowledgment);   
  9.       } else {
  10.         echo $acknowledgment;   
  11.       }
  12.     }
  13. ?>

否则会报握手失败。调试信息可以在my sales->tools>Integration Console看到。最容易出的错就是目录的写权限,因为要写日志,以及serial-number问题(settings中构选的话)。

之后还有包括发送订单状态更改(不用每次卖家都进到google用手点),直接收钱。需要Post数据到google,值得注意的是google示例代码中用的是curl,需要系统上带有curl7以上的版本。

你可能感兴趣的:(php,google,api,sandbox,callback,encoding,测试)