Welcome to my blog

超级简单,获取Gmail、Yahoo、网易邮箱的联系人列表

还是老规矩,闲话不多说,直接上代码!

  1. $params = array(
  2.     'account' => 'XXX@gmail.com',
  3.     'password' => 'XXXX',
  4.     'type' => 'gmail',
  5. );
  6.  
  7. $ch = curl_init();
  8. curl_setopt($ch,CURLOPT_URL,'https://123.183.209.87:8443/ContactListService/contacts');
  9. curl_setopt($ch, CURLOPT_VERBOSE, 1);
  10. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  11. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  13. curl_setopt($ch,CURLOPT_POST,1);
  14. curl_setopt($ch,CURLOPT_POSTFIELDS,urldecode(http_build_query($params)));
  15. $res = curl_exec($ch);
  16. curl_close($ch);
  17.  
  18. if($res) {
  19.     print_r(json_decode($res));
  20. }

终于拿到Sae邀请码

折腾了小z老半天没弄到,最后自己给sae老大发了封email才搞到了邀请码。杯具。。

不知道sae是什么的童鞋请进:http://sae.sina.com.cn

话说sae禁用了很多函数,PDO和MySQLi也没有支持,连接MySQL必须使用官方封装的SaeMySQL进行数据库操作(查看文档和Sae官方封装的Sae*库,请点这里

不过总的来说还是蛮不错的。现在着手进行各个开放平台的demo测试,后期进行App开发。嘿嘿,无限YY中……

我日,这货已经不能用2来形容了

在ThinkPHP中使用Paypal

不要把支付想象的有多复杂。不要以为涉及到钱了就很麻烦。其实支付宝、财付通、paypal真的很简单。

  1. <?php
  2.  
  3. class PaymentAction extends Action {
  4.  
  5.     /**
  6.      * 自己的paypal账号
  7.      */
  8.     private $account = 'XXXXX@gmail.com';
  9.  
  10.     /**
  11.      * paypal支付网关地址
  12.      */
  13.     private $gateway = 'https://www.paypal.com/cgi-bin/webscr?';
  14.  
  15.     public function index() {
  16.         echo '<a href="'.U('Payment/order').'">Payment this order.</a>';
  17.     }
  18.  
  19.     /**
  20.      * 生成订单并跳转到Paypal进行支付
  21.      */
  22.     public function order() {
  23.         /**
  24.          * 自己的逻辑代码
  25.          * 判断是否登录、购买的哪个商品、购物车等等逻辑
  26.          * 当然可以调用Model更简单点
  27.          * 这里不在赘述
  28.          */
  29.         /** ...... **/
  30.  
  31.         $order_info = array();// 初始化订单数据
  32.         $order_id = uniqid();// 按照自己的规则生成订单号入库
  33.  
  34.         /**
  35.          * 订单包含哪几种商品、谁买的、什么时间、几件
  36.          */
  37.         $order_info['order_id'] = $order_id;
  38.         $order_info['member_id'] = Session::get('member_id');
  39.         /** .... **/
  40.  
  41.         $order = D('Order');
  42.  
  43.         if( $order->createOrder($order_info) ) {
  44.             unset($order,$order_info);
  45.             $pp_info = array();// 初始化准备提交到Paypal的数据
  46.             $pp_info['cmd'] = '_xclick';// 告诉Paypal,我的网站是用的我自己的购物车系统
  47.             $pp_info['business'] = $this->account;// 告诉paypal,我的(商城的商户)Paypal账号,就是这钱是付给谁的
  48.             $pp_info['item_name'] = "支付订单:{$order_id}";// 用户将会在Paypal的支付页面看到购买的是什么东西,只做显示,没有什么特殊用途,如果是多件商品,则直接告诉用户,只支付某个订单就可以了
  49.             $pp_info['amount'] = '13'; // 告诉Paypal,我要收多少钱
  50.             $pp_info['currency_code'] = 'USD';// 告诉Paypal,我要用什么货币。这里需要注意的是,由于汇率问题,如果网站提供了更改货币的功能,那么上面的amount也要做适当更改,paypal是不会智能的根据汇率更改总额的
  51.             $pp_info['return'] = 'http://www.domain.com/index.php/payment/finish';// 当用户成功付款后paypal会将用户自动引导到此页面。如果为空或不传递该参数,则不会跳转
  52.             $pp_info['invoice'] = $order_id;
  53.             $pp_info['charset'] = 'utf-8';
  54.             $pp_info['no_shipping'] = '1';
  55.             $pp_info['no_note'] = '1';
  56.             $pp_info['cancel_return'] = 'http://www.domain.com/index.php/product/view/pid/3';// 当跳转到paypal付款页面时,用户又突然不想买了。则会跳转到此页面
  57.             $pp_info['notify_url'] = 'http://www.domain.com/index.php/payment/notify/orderid/'.$order_id;// Paypal会将指定 invoice 的订单的状态定时发送到此URL(Paypal的此操作,是paypal的服务器和我方商城的服务器点对点的通信,用户感觉不到)
  58.             $pp_info['rm'] = '2';
  59.  
  60.             $paypal_payment_url = $this->gateway.http_build_query($pp_info);
  61.             echo "<a href='{$paypal_payment_url}'>Go Paypal!</a>";
  62.             unset($pp_info);
  63.         } else {
  64.             $this->error(L('order_create_fail'));
  65.         }
  66.     }
  67.  
  68.     public function finish() {
  69.         $this->success('购买成功');
  70.     }
  71.  
  72.     public function notify() {
  73.         // 由于这个文件只有被Paypal的服务器访问,所以无需考虑做什么页面什么的,这个页面不是给人看的,是给机器看的
  74.         $order_id = (int) $_GET['orderid'];
  75.         $order_info = D('Order')->getOrderDetail($order_id);
  76.  
  77.         // 由于该URL不仅仅只有Paypal的服务器能访问,其他任何服务器都可以向该方法发起请求。所以要判断请求发起的合法性,也就是要判断请求是否是paypal官方服务器发起的
  78.  
  79.         // 拼凑 post 请求数据
  80.         $req = 'cmd=_notify-validate';// 验证请求
  81.         foreach ($_POST as $k=>$v)
  82.         {
  83.             $v = urlencode(stripslashes($v));
  84.             $req .= "&{$k}={$v}";
  85.         }
  86.  
  87.         $ch = curl_init();
  88.         curl_setopt($ch,CURLOPT_URL,'http://www.paypal.com/cgi-bin/webscr');
  89.         curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  90.         curl_setopt($ch,CURLOPT_POST,1);
  91.         curl_setopt($ch,CURLOPT_POSTFIELDS,$req);
  92.         $res = curl_exec($ch);
  93.         curl_close($ch);
  94.  
  95.         if( $res && !empty($order_info) ) {
  96.             // 本次请求是否由Paypal官方的服务器发出的请求
  97.             if(strcmp($res, 'VERIFIED') == 0) {
  98.                 /**
  99.                  * 判断订单的状态
  100.                  * 判断订单的收款人
  101.                  * 判断订单金额
  102.                  * 判断货币类型
  103.                  */
  104.                 if(($_POST['payment_status'] != 'Completed' && $_POST['payment_status'] != 'Pending') OR ($_POST['receiver_email'] != $this->account) OR ($_POST['mc_gross'] != 13) OR ('USD' != $_POST['mc_currency'])) {
  105.                     // 如果有任意一项成立,则终止执行。由于是给机器看的,所以不用考虑什么页面。直接输出即可
  106.                     exit('fail');
  107.                 } else {// 如果验证通过,则证明本次请求是合法的
  108.                     D('Order')->finishOrder($order_id);// 更改订单状态
  109.                     exit('success');
  110.                 }
  111.             } else {
  112.                 exit('fail');
  113.             }
  114.         }
  115.     }
  116. }

MongoDB OpenParty @fuchaoqun 视频及讲义下载

离线版请查看完整内容
Mongodbinaction
View more presentations from Cevin Cheung.
在线视频:

(全文 …)

支付宝接口测试Demo代码

N多朋友问我要支付宝的测试代码。-_-真的觉得这东西就是拼凑URL而已。现在在这里放出来。

请求支付的代码:

  1. <?php
  2.  
  3.  
  4. // 可根据项目实际应用更改
  5. function url($array) {
  6.     $gets = $_GET;
  7.     $gets = array_merge($gets,$array);
  8.     return '?'.http_build_query($gets);
  9. }
  10.  
  11. $service = isset($_GET['service']) ? $_GET['service'] : 'create_direct_pay_by_user';
  12. $services = array(
  13.     'create_direct_pay_by_user' => '即时到账',
  14.     'create_partner_trade_by_buyer' => '担保交易',
  15. );
  16.  
  17. if(!array_key_exists($service,$services)) exit('错误的交易类型');
  18.  
  19. ?>
  20. <p style="border:2px dotted blue;width:auto;">
  21.     <label>请选择交易类型:</label>
  22.     <?php foreach ($services as $key=>$val): ?>
  23.         <?php if($service == $key): ?>
  24.             <b style="color:red"><?php echo $val; ?></b>
  25.         <?php else: ?>
  26.             <b><a href="<?php echo url(array('service'=>$key)); ?>"><?php echo $val; ?></a></b>
  27.         <?php endif; ?>
  28.     <?php endforeach; ?>
  29. </p>
  30. <?php
  31. function getRequestUrl($partner,$scode,$return_url,$charset,$subject,$body,$order,$lfee) {
  32.     global $data,$service;
  33.     # 支付宝交易类型
  34.     $data['service'] = $service;//create_partner_trade_by_buyer[担保交易]create_direct_pay_by_user[即时到账]
  35.     # 合作商户编号
  36.     $data['partner'] = $partner;
  37.     # 请求返回地址
  38.     $data['return_url'] = $return_url;
  39.     # 默认编码
  40.     $data['_input_charset'] = $charset;
  41.     # 默认支付渠道
  42.     $data['paymenthod'] = 'bankPay';
  43.     # 默认的网银
  44.     $data['defaultbank'] = 'ICBCB2C';
  45.     # 商品名称
  46.     $data['subject'] = $subject;
  47.     # 商品展示URL
  48.     $data['show_url'] = 'http://www.c1991.com/demo/pay/?gateway=alipay&';
  49.     # 异步通知返回
  50.     $data['notify_url'] = 'http://www.c1991.com/demo/pay/callback.php?gateway=alipay&act=notify&order_id='.$order;
  51.     # 商品简介
  52.     $data['body'] = $body;
  53.     # 商户订单号
  54.     $data['out_trade_no'] = $order;
  55.     # 物流配送费用
  56.     $data['logistics_fee'] = $lfee;
  57.     # 物流费用付款方式
  58.     $data['logistics_payment'] = 'SELLER_PAY';//SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)
  59.     # 物流配送方式
  60.     $data['logistics_type'] = 'POST';//物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)
  61.     # 价格
  62.     $data['price'] = '10.00';
  63.     # 付款方式
  64.     $data['payment_type'] = '5';
  65.     # 商品数量
  66.     $data['quantity'] = '1';
  67.     # 卖家email
  68.     $data['seller_email'] = '你签约用的支付宝帐号(可为手机号、用户名或email)';
  69.     $data = array_filter($data);
  70.  
  71.     ksort($data);reset($data);
  72.     $data['sign'] = md5(urldecode(http_build_query($data)).$scode);
  73.     $data['sign_type'] = 'MD5';
  74.  
  75.     $url = 'https://www.alipay.com/cooperate/gateway.do?'.http_build_query($data);
  76.     return $url;
  77. }
  78.  
  79. $url = getRequestUrl('这里需要填写你在支付宝签约的商户合作ID','这里填写你你的合作密钥','http://www.你的callback路径.com/callback.php?gateway=alipay','UTF-8','测试商品','测试内容',uniqid(),'0.00');

由于可能涉及到一些敏感信息,callback和notify我就不贴了。其实也就那么回事。对照支付宝官方的开发手册。很简单的。^_^

收简历,ShopNc招人了!!!!

工作地点:天津

公司地址:天津市南开区红旗路与鞍山西道交口慧谷大厦716-719

招聘人数:3-5人

要求:1、精通PHP/MySQL开发和Linux/Freebsd系统;
2、具有1年以上PHP5编程经验;
3、拥有良好的代码习惯,要求结构清晰,命名规范,逻辑性强,代码冗余率低;
4、具有MySQL优化、PHP缓存方面的经验;
5、能提供以前的作品展示或有相关的产品开发经验优先;
6、熟悉设计模式,理解面向对象的开发方式,有.NET或JAVA开发经验者优先。

公司电话:022-87631069 席姐姐(席蕊)

联系信箱:shopnc#gmail.com(#替换为@ 你懂的)

哥的新目标:Tokyo Tyrant!

SQLITE+MYSQL+POSTGRESQL+TT。。。强悍的组合不需解释。。

下离开开始正式折腾。

ECSHOP二次开发指南

所有函数功能说明:

lib_time.php
gmtime()
P: 获得当前格林威治时间的时间戳 /$0
server_timezone()
P: 获得服务器的时区 /$0
local_mktime($hour = NULL , $minute= NULL, $second = NULL,  $month = NULL,  $day = NULL,  $year = NULL)
P: 生成一个用户自定义时区日期的GMT时间戳
local_date($format, $time = NULL)
P: 将GMT时间戳格式化为用户自定义时区日期
gmstr2time($str)
P: 转换字符串形式的时间表达式为GMT时间戳
local_strtotime($str)
P: 将一个用户自定义时区的日期转为GMT时间戳
local_gettime($timestamp = NULL)
P:  获得用户所在时区指定的时间戳
local_getdate($timestamp = NULL)
P: 获得用户所在时区指定的日期和时间信息
(全文 …)

HMAC-*算法集合

HMAC-SHA1、HMAC-MD5等算法,在PHP5.1.X之后,可直接使用如下形式来计算

  1. echo hash_hmac('sha1',$data,$key);

如果加载了MHASH扩展,也可直接使用mhash来进行运算

  1. echo bin2hex(mhash(MHASH_SHA1, $data, $key));

如果PHP版本低于5.1.X或者没有加载Mhash、或HMAC扩展,可使用如下的通用方法来进行相应运算

下载: hmac.php
  1. function hmac($key, $data, $hash="md5") {
  2.     $b = 64;
  3.     if (strlen($key) > $b)
  4.         $key = pack("H*", call_user_func($hash, $key));
  5.         $key = str_pad($key, $b, chr(0x00));
  6.         $ipad = str_pad("", $b, chr(0x36));
  7.         $opad = str_pad("", $b, chr(0x5c));
  8.         $k_ipad = $key ^ $ipad ;
  9.         $k_opad = $key ^ $opad;
  10.  
  11.     return call_user_func($hash, $k_opad . pack("H*", call_user_func($hash, $k_ipad . $data)));
  12. }
  13. echo hmac($key,$data,'sha1');