/** * Description of CV3Util * V3 API工具类[APHP三大操作单元之一] * @author jgao */ class CV3Util { // // ----以下为通用常量定义---- /** * qq空间 */ const qzone = 'qzone'; /** * 朋友网 */ const pengyou = 'pengyou'; //put your code here /** * V3SDK * @var OpenApiV3 */ var $sdk = 0; var $appkey; // // // /** * 初始化V3链接 * @param type $host * @param type $appid * @param type $appkey * @return \OpenApiV3 */ function v3conn($host, $appid, $appkey) { $this->appkey = $appkey; $this->sdk = new OpenApiV3($appid, $appkey); $this->sdk->setServerName($host); return $this->sdk; } /** * 关闭V3链接 */ function close() { } /** * 获取通用参数格式 * @param type $openid * @param type $openkey * @param type $pf * @return type */ function getParams($openid, $openkey, $pf) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, ); return $params; } // // // ----这里补充具体的后台API调用---- /** * cee付费sig校验流程 * @param type $params * @return type */ function cee_verify_sig($params, $url_path, &$sig_new) { // 获取原sig $sig = urldecode($params['sig']); $secret = $this->appkey . '&'; return SnsSigCheck::verifySig('GET', $url_path, $params, $secret, $sig, $sig_new); } /** * 生成自定义sig证书 * @param type $params * @param type $url_path * @return type */ function cee_self_sig($params, $self_url_path) { $secret = $this->appkey . '&'; foreach ($params as $k => $v) { $params[$k] = md5($v); } return SnsSigCheck::makeSig('GET', $self_url_path, $params, $secret); } // // // /** * ==============用户信息类API============== * 主要使用场景:应用中需要进行用户信息展示时。 */ /** * 获取玩家信息 * @param type $openid * @param type $openkey * @param type $pf * @return type */ function user_get_info($openid, $openkey, $pf) { $params = $this->getParams($openid, $openkey, $pf); return $this->sdk->api('/v3/user/get_info', $params, array(), 'post'); } /** * 批量获取玩家信息 * @param type $openid * @param type $openkey * @param type $pf * @param type $fopenids * @return type */ function user_get_multi_info($openid, $openkey, $pf, $fopenids) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'fopenids' => $fopenids, ); return $this->sdk->api('/v3/user/get_multi_info', $params, array(), 'post'); } /** * 获取登录用户的VIP信息,包括是否为QQ会员,蓝钻,黄钻,红钻,绿钻,粉钻,超级QQ,3366会员,是否为豪华版,是否年费(暂不能查询是否年费红钻),以及VIP等级。 * 1. 传一个参数,返回对应的一种VIP信息; * 2. 不传参数,默认返回蓝钻和黄钻两种信息; * 3. 支持查询VIP是否为豪华版的信息; * 4. 支持查询3366会员等级信息; * 5. 支持xml返回格式。 * @param type $openid //平台参数 * @param type $openkey * @param type $pf * @param type $member_vip //是否查询QQ会员信息,1为查询,0或者不写为不查询 * @param type $blue_vip //是否查询蓝钻信息,1为查询,0或者不写为不查询。 * @param type $yellow_vip //是否查询黄钻信息,1为查询,0或者不写为不查询。 * @param type $red_vip //是否查询红钻信息,1为查询,0或者不写为不查询。 * @param type $green_vip //是否查询绿钻信息,1为查询,0或者不写为不查询。 * @param type $pink_vip //是否查询粉钻信息,1为查询,0或者不写为不查询。 * @param type $superqq //是否查询超级qq信息,1为查询,0或者不写为不查询。 * @param type $is_3366 //是否查询3366信息,1为查询,0或者不写为不查询。 * @return type */ function user_total_vip_info($openid, $openkey, $pf, $member_vip = 0, $blue_vip = 0, $yellow_vip = 0, $red_vip = 0, $green_vip = 0, $pink_vip = 0, $superqq = 0, $is_3366 = 0 ) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'member_vip' => $member_vip, 'blue_vip' => $blue_vip, 'yellow_vip' => $yellow_vip, 'red_vip' => $red_vip, 'green_vip' => $green_vip, 'pink_vip' => $pink_vip, 'superqq' => $superqq, 'is_3366' => $is_3366 ); return $this->sdk->api('v3/user/total_vip_info', $params, array(), 'post'); } /** * 验证登录用户是否黄钻,是否年费黄钻,如果是则返回其黄钻等级等信息。 * * 注意,本接口与“获取用户信息”接口都返回了黄钻信息,但是二者之间有区别: * (1)本接口获取的黄钻信息是实时的,适用于需要黄钻信息特别准确的场景(例如每日礼包场景中,非黄钻用户开通黄钻后,返回应用应该立即可领取礼包); * (2)“获取用户信息”接口(v3/user/get_info)返回的否黄钻以及黄钻等级的信息是经过缓存的,有一定的延时,适用于不需要黄钻信息特别准确的场景(例如用户头像后的黄钻标识)。 * @param type $openid * @param type $openkey * @param type $pf * @return type */ function user_is_vip($openid, $openkey, $pf) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf ); return $this->sdk->api('v3/user/is_vip', $params, array(), 'post'); } /** * 查询用户的一个或多个好友是否开通了腾讯某个业务的VIP。目前只支持查询QQ会员信息(可查询到用户是否为QQ会员,年费会员,以及会员等级等)。 * * @param type $openid * @param type $openkey * @param type $pf * @param type $fopenids //需要获取信息的好友的openid列表,openid之间通过“_”分隔,每次最多可输入50个。 * @param type $flags //VIP业务查询标识。目前只支持查询QQ会员信息:qq_vip。 后期会支持更多业务的用户VIP信息查询。如果要查询多种VIP业务,通过“,”分隔。如果不输入该值,默认为全部查询。 * @return type */ function user_friends_vip_info($openid, $openkey, $pf, $fopenids, $flags = null ) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'fopenids' => $fopenids, 'flags' => $flags ); return $this->sdk->api('v3/user/friends_vip_info', $params, array(), 'post'); } // // // /** * 敏感词过滤 * @param type $openid * @param type $openkey * @param type $pf * @param type $content * @param type $msgId * @return type */ function word_filter($openid, $openkey, $pf, $content, $msgId ) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'content' => $content, 'msgid' => $msgId ); return $this->sdk->api('/v3/csec/word_filter', $params, array(), 'post'); } // // // // /** * 移动支付api * @param string $script_name 调用的API方法,比如/mpay/present_m,参考 http://wiki.mg.open.qq.com/index.php?title=Android%E6%94%AF%E4%BB%98API * @param array $params 调用API时带的参数 * @param string $method 请求方法 post / get * @param string $protocol 协议类型 http / https * @return type 结果 */ private function msdk_Api($script_name, $params, $cookie = array(), $method = 'post', $protocol = 'http') { $this->sdk->setServerName(MSDK_HOST); // $ret = $this->sdk->api($script_name, $params, $cookie, $method, $protocol); $ret = $this->sdk->ymsdk_api($script_name, $params, $cookie, $method, $protocol); $this->sdk->setServerName(V3_HOST); return $ret; } /** * 赠送游戏币接口,应用在后台自助申请赠送游戏币的营销活动,获取到活动号和礼包ID后 * 调用本接口赠送。赠送的游戏币不参与结算分成。 * @param str $platform 1 微信 2 手Q * @param str $openid * @param str $openkey * @param str $pf * @param str $paytoken * @param str $appid * @param str $pfkey * @param int $ts * @param str $zoneid 分区Id * @param str $discountid 赠送营销活动ID。(营销平台申请) * @param type $giftid 礼品ID。(营销平台申请) * @param type $presenttimes 赠送礼品的次数。如果配置的礼包ID对应1个游戏币,那么本字段表示要赠送游戏币的个数。 * @param type $userip (可选)用户的外网IP * @return V3Return */ function msdk_present($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $discountid, $giftid, $presenttimes) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pay_token' => $paytoken, 'pf' => $pf, 'pfkey' => $pfkey, 'appid' => $appid, 'zoneid' => $zoneid, 'ts' => $ts, 'discountid' => $discountid, 'giftid' => $giftid, 'presenttimes' => $presenttimes, // 'userip' => $userip, // (可选) 用户的外网IP // 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果 ); // 这个需要在cookie里面传一些参数 $cookie = self::ymsdk_makeCookie($platform); $cookie['org_loc'] = "/mpay/present_m"; return $this->msdk_Api('/mpay/present_m', $params, $cookie, 'get'); } /** * 查询游戏币余额接口 * @param type $openid * @param type $openkey * @param type $pf * @param type $paytoken * @param type $appid * @param type $pfkey * @param type $ts * @param str $zoneid 分区Id * @return V3Return */ function msdk_get_balance($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pay_token' => $paytoken, 'appid' => $appid, 'ts' => $ts, 'pf' => $pf, 'pfkey' => $pfkey, 'zoneid' => $zoneid, // 'userip' => $userip, // (可选) 用户的外网IP // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果 ); // 这个需要在cookie里面传一些参数 $cookie = self::ymsdk_makeCookie($platform); $cookie['org_loc'] = "/mpay/get_balance_m"; return $this->msdk_Api('/mpay/get_balance_m', $params, $cookie, 'get'); } /** * 扣除游戏币接口 * @param string $platform * @param string $openid * @param string $openkey * @param string $pf * @param string $paytoken * @param string $appid * @param string $pfkey * @param int $ts * @param string $sig * @param int $amt 扣游戏币数量。 * @param type $payitem 道具名称。 * @param type $appremark 备注。会写到账户流水。 * @return V3Return */ function msdk_pay($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $amt, $payitem, $appremark) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pay_token' => $paytoken, 'appid' => $appid, 'ts' => $ts, 'pf' => $pf, 'pfkey' => $pfkey, 'zoneid' => $zoneid, 'amt' => $amt, 'payitem' => $payitem, // (可选)道具名称 // 'userip' => $userip, // (可选) 用户的外网IP // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果 'appremark' => $appremark // (可选)备注。会写到账户流水。 ); // 这个需要在cookie里面传一些参数 $cookie = self::ymsdk_makeCookie($platform); $cookie['org_loc'] = "/mpay/pay_m"; return $this->msdk_Api('/mpay/pay_m', $params, $cookie, 'get'); } /** * 取消支付接口 * @param type $openid * @param type $openkey * @param type $pf * @param type $paytoken * @param type $appid * @param type $pfkey * @param type $ts * @param type $amt 扣游戏币数量 * @param type $billno 预扣流水号 * @param type $userip (可选)用户的外网ip * @param type $accounttype (可选)账户类型,基础货币(common)安全货币(security),不填默认common * @return V3Return */ function msdk_cancel_pay($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $amt, $billno) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pay_token' => $paytoken, 'appid' => $appid, 'ts' => $ts, 'pf' => $pf, 'pfkey' => $pfkey, 'zoneid' => $zoneid, 'amt' => $amt, 'billno' => $billno, // 'userip' => $userip, // (可选) 用户的外网IP // 'accounttype' => $accounttype // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common // 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果 ); // 这个需要在cookie里面传一些参数 $cookie = self::ymsdk_makeCookie($platform); $cookie['org_loc'] = "/mpay/cancel_pay_m"; return $this->msdk_Api('/mpay/cancel_pay_m', $params, $cookie, 'get'); } // // // /** * 移动支付api * @param string $script_name 调用的API方法,比如/mpay/present_m,参考 http://wiki.mg.open.qq.com/index.php?title=Android%E6%94%AF%E4%BB%98API * @param array $params 调用API时带的参数 * @param string $method 请求方法 post / get * @param string $protocol 协议类型 https * @return type 结果 */ private function ysdk_Api($script_name, $params, $cookie = array(), $method = 'post', $protocol = 'https') { $this->sdk->setServerName(YSDK_HOST); // 设置sdk服务端地址 // $ret = $this->sdk->api($script_name, $params, $cookie, $method, $protocol); $ret = $this->sdk->ymsdk_api($script_name, $params, $cookie, $method, $protocol); $this->sdk->setServerName(V3_HOST); return $ret; } /** * 查询游戏币余额接口 * @param type $sessionId * @param type $sessionType * @param type $openid * @param type $openkey * @param type $pf * @param type $appid * @param type $pfkey * @param type $ts * @return type */ function ysdk_get_balance($sessionId, $sessionType, $openid, $openkey, $pf, $appid, $pfkey, $ts) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'appid' => $appid, 'ts' => $ts, 'pf' => $pf, 'pfkey' => $pfkey, 'zoneid' => 1, // 多平台版本,在腾讯没有设置多分区信息 // 'userip' => $userip, // (可选) 用户的外网IP // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果 ); // 这个需要在cookie里面传一些参数 $cookie = self::ymsdk_makeCookie($sessionId, $sessionType, "/mpay/get_balance_m"); return $this->ysdk_Api('/mpay/get_balance_m', $params, $cookie, "get"); // ysdk在这里比msdk多加了个/v3/r } /** * 扣除游戏币接口 * @param type $sessionId * @param type $sessionType * @param type $openid * @param type $openkey * @param type $pf * @param type $appid * @param type $pfkey * @param type $ts * @param int $amt 扣游戏币数量。 * @param string $billno 订单号,业务自定义,业务需要确保全局的唯一性;相同的订单号不会重复扣款。长度不超过63字节,数字和字符不限,不能包含特殊字符如&= | % ^ + 等即可 * @param string $payitem 道具名称。 * @param string $appremark 备注。会写到账户流水。 * @return V3Return */ function ysdk_pay($sessionId, $sessionType, $openid, $openkey, $pf, $appid, $pfkey, $ts, $amt, $billno, $payitem, $appremark) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'appid' => $appid, 'ts' => $ts, 'pf' => $pf, 'pfkey' => $pfkey, 'zoneid' => 1, 'amt' => $amt, 'billno' => $billno, // 预扣流水号(业务自己定义,业务需要确保全局唯一性; // 相同的订单号不会重复扣款,长度不超过63个字节,数字字符不限,不能包含特殊字符&|=%^+等即可) 'payitem' => $payitem, // (可选)道具名称 // 'userip' => $userip, // (可选) 用户的外网IP // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果 'appremark' => $appremark // (可选)备注。会写到账户流水。 ); // 这个需要在cookie里面传一些参数 $cookie = self::ymsdk_makeCookie($sessionId, $sessionType, "/mpay/pay_m"); return $this->ysdk_Api('/mpay/pay_m', $params, $cookie, "get"); // ysdk在这里比msdk多加了个/v3/r } // // // /** // * 赠送游戏币接口,应用在后台自助申请赠送游戏币的营销活动,获取到活动号和礼包ID后 // * 调用本接口赠送。赠送的游戏币不参与结算分成。 // * @param str $platform 1 微信 2 手Q // * @param str $openid // * @param str $openkey // * @param str $pf // * @param str $appid // * @param str $pfkey // * @param int $ts // * @param str $zoneid 分区Id // * @param str $discountid 赠送营销活动ID。(营销平台申请) // * @param type $giftid 礼品ID。(营销平台申请) // * @param type $presenttimes 赠送礼品的次数。如果配置的礼包ID对应1个游戏币,那么本字段表示要赠送游戏币的个数。 // * @param type $userip (可选)用户的外网IP // * @return V3Return // */ // function ysdks_present($platform, $openid, $openkey, $pf, $appid, $pfkey, $ts, $zoneid, $discountid, $giftid, $presenttimes) { // $params = array( // 'openid' => $openid, // 'openkey' => $openkey, // 'pf' => $pf, // 'pfkey' => $pfkey, // 'appid' => $appid, // 'zoneid' => $zoneid, // 'ts' => $ts, // 'discountid' => $discountid, // 'giftid' => $giftid, // 'presenttimes' => $presenttimes, //// 'userip' => $userip, // (可选) 用户的外网IP //// 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果 // ); // // 这个需要在cookie里面传一些参数 // $cookie = self::m_makeCookie($platform); // $cookie['org_loc'] = "/mpay/present_m"; // // return $this->m_Api('/mpay/present_m', $params, $cookie, 'get'); // } // /** // * 取消支付接口 // * @param type $openid // * @param type $openkey // * @param type $pf // * @param type $paytoken // * @param type $appid // * @param type $pfkey // * @param type $ts // * @param type $amt 扣游戏币数量 // * @param type $billno 预扣流水号 // * @param type $userip (可选)用户的外网ip // * @param type $accounttype (可选)账户类型,基础货币(common)安全货币(security),不填默认common // * @return V3Return // */ // function ysdk_cancel_pay($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $amt, $billno) { // $params = array( // 'openid' => $openid, // 'openkey' => $openkey, // 'pay_token' => $paytoken, // 'appid' => $appid, // 'ts' => $ts, // 'pf' => $pf, // 'pfkey' => $pfkey, // 'zoneid' => $zoneid, // 'amt' => $amt, // 'billno' => $billno, //// 'userip' => $userip, // (可选) 用户的外网IP //// 'accounttype' => $accounttype // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common //// 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果 // ); // // 这个需要在cookie里面传一些参数 // $cookie = self::m_makeCookie($platform); // $cookie['org_loc'] = "/mpay/cancel_pay_m"; // return $this->m_Api('/mpay/cancel_pay_m', $params, $cookie, 'get'); // } // // /** * 生成ysdk所需cookie * @param type $sessionId * @param type $sessionType * @param type $org_loc * @return string */ static function ymsdk_makeCookie($sessionId, $sessionType, $org_loc) { $cookie = array(); $cookie['session_id'] = $sessionId; $cookie['session_type'] = $sessionType; $cookie['org_loc'] = $org_loc; return $cookie; } // // // /** * ================支付类API================= * 主要使用场景:应用中需要实现道具购买/寄售逻辑时。 */ /** * 购买付费道具[Q点直购] * @param type $openid * @param type $openkey * @param type $pf * @param type $pfkey * @param type $ts 时间戳 * @param type $itemID 道具id * @param type $itemPrice 道具单价 * @param type $itemName 道具名称 * @param type $itemDes 道具描述 * @param type $goodsurl 道具图url * @return type */ function pay_buy_goods($openid, $openkey, $pf, $pfkey, $ts, $itemID, # $itemPrice, $itemName, $itemDes, $goodsurl, $zoneid = 0 ) { $cee_extend = getenv("CEE_DOMAINNAME") . '*' . getenv("CEE_VERSIONID") . '*' . getenv("CEE_WSNAME"); $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'pfkey' => $pfkey, 'ts' => $ts, 'payitem' => $itemID . '*' . $itemPrice . '*1', 'appmode' => "1", 'max_num' => "1", 'goodsmeta' => $itemName . '*' . $itemDes, 'goodsurl' => $goodsurl, 'zoneid' => $zoneid, 'cee_extend' => $cee_extend, ); // echo json_encode($params); return $this->sdk->api('/v3/pay/buy_goods', $params, array(), 'post', 'https'); } /** * 确认支付 * @param type $openid * @param type $openkey * @param type $pf * @param type $ts * @param type $payitem * @param type $token * @param type $billno * @param type $amt * @return type */ function pay_confirm_delivery($openid, $openkey, $pf, $ts, $payitem, $token, $billno, $amt ) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'ts' => $ts, 'payitem' => $payitem, 'token_id' => $token, 'billno' => $billno, 'version' => "v3", 'zoneid' => "0", 'providetype' => "0", 'provide_errno' => "0", 'provide_errmsg' => "OK", 'amt' => $amt, 'payamt_coins' => "0", 'pubacct_payamt_coins' => "0", ); return $this->sdk->api('/v3/pay/confirm_delivery', $params, array(), array(), 'post', 'https'); } // // // // /** * ================营销类API================= * 主要使用场景:支付接入的时候必须要实现黄钻特权体系。 */ /** * 获得每日礼包(含新手礼包)(点击每日/新手礼包时,调用本接口获得token) * 或者开通包月礼包(开通业务或续费业务,用户点击活动入口时,调用此接口获取token) * @param type $openid * @param type $openkey * @param type $pf * @param type $pfkey * @param type $tokentype * token的类型。 * 1:表示该token为每日礼包赠送、开通包月送礼包营销活动中的赠送道具/物品的token。 * 2:表示该token为任务买卖市场营销活动中的领取奖励的token。 * @param type $discountid 营销活动的actorID或者任务集市中的“商品ID” * @param type $ts * @return type */ function pay_gift_get_token($openid, $openkey, $pf, $pfkey, $tokentype, $discountid, $ts, $zoneid = 0 ) { $cee_extend = getenv("CEE_DOMAINNAME") . '*' . getenv("CEE_VERSIONID") . '*' . getenv("CEE_WSNAME"); $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'pfkey' => $pfkey, 'tokentype' => $tokentype, 'discountid' => $discountid, 'ts' => $ts, 'version' => "v3", 'zoneid' => $zoneid, 'cee_extend' => $cee_extend ); return $this->sdk->api('/v3/pay/get_token', $params, array(), 'post', 'https'); } // // // /** * 查询玩家已加入的公会QQ群列表 * @param type $openid * @param type $openkey * @param type $pf * @return type */ function is_qqgroupmember($openid, $openkey, $pf) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf ); return $this->sdk->api('/v3/qqgroup/is_group_member', $params, 'post'); } /** * 查询公会QQ群中安装了本应用的成员列表 * @param type $openid * @param type $openkey * @param type $pf * @param type $group_openid * @param type $guildId * @param type $page >=1 * @return type */ function get_app_qqgroupmembers($openid, $openkey, $pf, $group_openid, $guildId, $page = 1 ) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'group_openid' => $group_openid, 'union_id' => $guildId, 'page' => $page, 'zone' => 0 ); return $this->sdk->api('/v3/qqgroup/get_app_groupmembers', $params, array(), 'post'); } /** * 解绑公会QQ群 * @param type $openid * @param type $openkey * @param type $pf * @param type $group_openid * @param type $guildId * @return type */ function unbind_qqgroup($openid, $openkey, $pf, $group_openid, $guildId ) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'group_openid' => $group_openid, 'union_id' => $guildId ); return $this->sdk->api('/v3/qqgroup/unbind_qqgroup', $params, array(), 'post'); } // // /** * ================关系链类API================= * 主要使用场景:应用中需要用户之间进行互动时。 */ /** * 获取安装了应用的平台好友 * @param type $openid * @param type $openkey * @param type $pf * @return type */ function relation_get_app_friends($openid, $openkey, $pf) { $params = $this->getParams($openid, $openkey, $pf); return $this->sdk->api('/v3/relation/get_app_friends', $params, array(), 'post'); } /** * 验证是否是好友 * @param type $openid * @param type $openkey * @param type $pf * @param type $fopenid * @return type */ function relation_is_friend($openid, $openkey, $pf, $fopenid) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'fopenid' => $fopenid, ); return $this->sdk->api('/v3/relation/is_friend', $params, array(), 'post'); } // // /** * ================应用推广类API================= * 主要使用场景:应用中需要实现新用户/活跃用户增长时。 */ function spread_verify_invkey($openid, $openkey, $pf, $invkey, $itime, $iopenid) { $params = array( 'openid' => $openid, 'openkey' => $openkey, 'pf' => $pf, 'invkey' => $invkey, 'itime' => $itime, 'iopenid' => $iopenid, ); return $this->sdk->api('/v3/spread/verify_invkey', $params, array(), 'post'); } // // // } ////