CV3Util.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. <?php
  2. include_once dirname(__FILE__) . '/OpenAPI/OpenApiV3.php';
  3. namespace loyalsoft;
  4. //<editor-fold defaultstate="collapsed" desc="CV3Util">
  5. /**
  6. * Description of CV3Util
  7. * V3 API工具类[APHP三大操作单元之一]
  8. * @author jgao
  9. */
  10. class CV3Util
  11. {
  12. //<editor-fold defaultstate="collapsed" desc="常量/变量定义">
  13. // ----以下为通用常量定义----
  14. /**
  15. * qq空间
  16. */
  17. const qzone = 'qzone';
  18. /**
  19. * 朋友网
  20. */
  21. const pengyou = 'pengyou';
  22. //put your code here
  23. /**
  24. * V3SDK
  25. * @var OpenApiV3
  26. */
  27. var $sdk = 0;
  28. var $appkey;
  29. //</editor-fold>
  30. //
  31. //<editor-fold defaultstate="collapsed" desc="==========辅助方法===========">
  32. /**
  33. * 初始化V3链接
  34. * @param type $host
  35. * @param type $appid
  36. * @param type $appkey
  37. * @return \OpenApiV3
  38. */
  39. function v3conn($host, $appid, $appkey)
  40. {
  41. $this->appkey = $appkey;
  42. $this->sdk = new OpenApiV3($appid, $appkey);
  43. $this->sdk->setServerName($host);
  44. return $this->sdk;
  45. }
  46. /**
  47. * 关闭V3链接
  48. */
  49. function close()
  50. {
  51. }
  52. /**
  53. * 获取通用参数格式
  54. * @param type $openid
  55. * @param type $openkey
  56. * @param type $pf
  57. * @return type
  58. */
  59. function getParams($openid, $openkey, $pf)
  60. {
  61. $params = array(
  62. 'openid' => $openid,
  63. 'openkey' => $openkey,
  64. 'pf' => $pf,
  65. );
  66. return $params;
  67. }
  68. //</editor-fold>
  69. //<editor-fold defaultstate="collapsed" desc="========= 调用V3API =========">
  70. // ----这里补充具体的后台API调用----
  71. /**
  72. * cee付费sig校验流程
  73. * @param type $params
  74. * @return type
  75. */
  76. function cee_verify_sig($params, $url_path, &$sig_new)
  77. {
  78. // 获取原sig
  79. $sig = urldecode($params['sig']);
  80. $secret = $this->appkey . '&';
  81. return SnsSigCheck::verifySig('GET', $url_path, $params, $secret, $sig, $sig_new);
  82. }
  83. /**
  84. * 生成自定义sig证书
  85. * @param type $params
  86. * @param type $url_path
  87. * @return type
  88. */
  89. function cee_self_sig($params, $self_url_path)
  90. {
  91. $secret = $this->appkey . '&';
  92. foreach ($params as $k => $v) {
  93. $params[$k] = md5($v);
  94. }
  95. return SnsSigCheck::makeSig('GET', $self_url_path, $params, $secret);
  96. }
  97. //</editor-fold>
  98. //
  99. //<editor-fold defaultstate="collapsed" desc="==========用户信息类API=========">
  100. /**
  101. * ==============用户信息类API==============
  102. * 主要使用场景:应用中需要进行用户信息展示时。
  103. */
  104. /**
  105. * 获取玩家信息
  106. * @param type $openid
  107. * @param type $openkey
  108. * @param type $pf
  109. * @return type
  110. */
  111. function user_get_info($openid, $openkey, $pf)
  112. {
  113. $params = $this->getParams($openid, $openkey, $pf);
  114. return $this->sdk->api('/v3/user/get_info', $params, array(), 'post');
  115. }
  116. /**
  117. * 批量获取玩家信息
  118. * @param type $openid
  119. * @param type $openkey
  120. * @param type $pf
  121. * @param type $fopenids
  122. * @return type
  123. */
  124. function user_get_multi_info($openid, $openkey, $pf, $fopenids)
  125. {
  126. $params = array(
  127. 'openid' => $openid,
  128. 'openkey' => $openkey,
  129. 'pf' => $pf,
  130. 'fopenids' => $fopenids,
  131. );
  132. return $this->sdk->api('/v3/user/get_multi_info', $params, array(), 'post');
  133. }
  134. /**
  135. * 获取登录用户的VIP信息,包括是否为QQ会员,蓝钻,黄钻,红钻,绿钻,粉钻,超级QQ,3366会员,是否为豪华版,是否年费(暂不能查询是否年费红钻),以及VIP等级。
  136. * 1. 传一个参数,返回对应的一种VIP信息;
  137. * 2. 不传参数,默认返回蓝钻和黄钻两种信息;
  138. * 3. 支持查询VIP是否为豪华版的信息;
  139. * 4. 支持查询3366会员等级信息;
  140. * 5. 支持xml返回格式。
  141. * @param type $openid //平台参数
  142. * @param type $openkey
  143. * @param type $pf
  144. * @param type $member_vip //是否查询QQ会员信息,1为查询,0或者不写为不查询
  145. * @param type $blue_vip //是否查询蓝钻信息,1为查询,0或者不写为不查询。
  146. * @param type $yellow_vip //是否查询黄钻信息,1为查询,0或者不写为不查询。
  147. * @param type $red_vip //是否查询红钻信息,1为查询,0或者不写为不查询。
  148. * @param type $green_vip //是否查询绿钻信息,1为查询,0或者不写为不查询。
  149. * @param type $pink_vip //是否查询粉钻信息,1为查询,0或者不写为不查询。
  150. * @param type $superqq //是否查询超级qq信息,1为查询,0或者不写为不查询。
  151. * @param type $is_3366 //是否查询3366信息,1为查询,0或者不写为不查询。
  152. * @return type
  153. */
  154. 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
  155. )
  156. {
  157. $params = array(
  158. 'openid' => $openid,
  159. 'openkey' => $openkey,
  160. 'pf' => $pf,
  161. 'member_vip' => $member_vip,
  162. 'blue_vip' => $blue_vip,
  163. 'yellow_vip' => $yellow_vip,
  164. 'red_vip' => $red_vip,
  165. 'green_vip' => $green_vip,
  166. 'pink_vip' => $pink_vip,
  167. 'superqq' => $superqq,
  168. 'is_3366' => $is_3366
  169. );
  170. return $this->sdk->api('v3/user/total_vip_info', $params, array(), 'post');
  171. }
  172. /**
  173. * 验证登录用户是否黄钻,是否年费黄钻,如果是则返回其黄钻等级等信息。
  174. *
  175. * 注意,本接口与“获取用户信息”接口都返回了黄钻信息,但是二者之间有区别:
  176. * (1)本接口获取的黄钻信息是实时的,适用于需要黄钻信息特别准确的场景(例如每日礼包场景中,非黄钻用户开通黄钻后,返回应用应该立即可领取礼包);
  177. * (2)“获取用户信息”接口(v3/user/get_info)返回的否黄钻以及黄钻等级的信息是经过缓存的,有一定的延时,适用于不需要黄钻信息特别准确的场景(例如用户头像后的黄钻标识)。
  178. * @param type $openid
  179. * @param type $openkey
  180. * @param type $pf
  181. * @return type
  182. */
  183. function user_is_vip($openid, $openkey, $pf)
  184. {
  185. $params = array(
  186. 'openid' => $openid,
  187. 'openkey' => $openkey,
  188. 'pf' => $pf
  189. );
  190. return $this->sdk->api('v3/user/is_vip', $params, array(), 'post');
  191. }
  192. /**
  193. * 查询用户的一个或多个好友是否开通了腾讯某个业务的VIP。目前只支持查询QQ会员信息(可查询到用户是否为QQ会员,年费会员,以及会员等级等)。
  194. *
  195. * @param type $openid
  196. * @param type $openkey
  197. * @param type $pf
  198. * @param type $fopenids //需要获取信息的好友的openid列表,openid之间通过“_”分隔,每次最多可输入50个。
  199. * @param type $flags //VIP业务查询标识。目前只支持查询QQ会员信息:qq_vip。 后期会支持更多业务的用户VIP信息查询。如果要查询多种VIP业务,通过“,”分隔。如果不输入该值,默认为全部查询。
  200. * @return type
  201. */
  202. function user_friends_vip_info($openid, $openkey, $pf, $fopenids, $flags = null
  203. )
  204. {
  205. $params = array(
  206. 'openid' => $openid,
  207. 'openkey' => $openkey,
  208. 'pf' => $pf,
  209. 'fopenids' => $fopenids,
  210. 'flags' => $flags
  211. );
  212. return $this->sdk->api('v3/user/friends_vip_info', $params, array(), 'post');
  213. }
  214. //</editor-fold>
  215. //
  216. //<editor-fold defaultstate="collapsed" desc="==========敏感词过滤API=========">
  217. /**
  218. * 敏感词过滤
  219. * @param type $openid
  220. * @param type $openkey
  221. * @param type $pf
  222. * @param type $content
  223. * @param type $msgId
  224. * @return type
  225. */
  226. function word_filter($openid, $openkey, $pf, $content, $msgId
  227. )
  228. {
  229. $params = array(
  230. 'openid' => $openid,
  231. 'openkey' => $openkey,
  232. 'pf' => $pf,
  233. 'content' => $content,
  234. 'msgid' => $msgId
  235. );
  236. return $this->sdk->api('/v3/csec/word_filter', $params, array(), 'post');
  237. }
  238. //</editor-fold>
  239. //
  240. //
  241. //<editor-fold defaultstate="collapsed" desc="---------- Msdk 移动端支付 -----------">
  242. /**
  243. * 移动支付api
  244. * @param string $script_name 调用的API方法,比如/mpay/present_m,参考 http://wiki.mg.open.qq.com/index.php?title=Android%E6%94%AF%E4%BB%98API
  245. * @param array $params 调用API时带的参数
  246. * @param string $method 请求方法 post / get
  247. * @param string $protocol 协议类型 http / https
  248. * @return type 结果
  249. */
  250. private function msdk_Api($script_name, $params, $cookie = array(), $method = 'post', $protocol = 'http')
  251. {
  252. $this->sdk->setServerName(MSDK_HOST);
  253. // $ret = $this->sdk->api($script_name, $params, $cookie, $method, $protocol);
  254. $ret = $this->sdk->ymsdk_api($script_name, $params, $cookie, $method, $protocol);
  255. $this->sdk->setServerName(V3_HOST);
  256. return $ret;
  257. }
  258. /**
  259. * 赠送游戏币接口,应用在后台自助申请赠送游戏币的营销活动,获取到活动号和礼包ID后
  260. * 调用本接口赠送。赠送的游戏币不参与结算分成。
  261. * @param str $platform 1 微信 2 手Q
  262. * @param str $openid
  263. * @param str $openkey
  264. * @param str $pf
  265. * @param str $paytoken
  266. * @param str $appid
  267. * @param str $pfkey
  268. * @param int $ts
  269. * @param str $zoneid 分区Id
  270. * @param str $discountid 赠送营销活动ID。(营销平台申请)
  271. * @param type $giftid 礼品ID。(营销平台申请)
  272. * @param type $presenttimes 赠送礼品的次数。如果配置的礼包ID对应1个游戏币,那么本字段表示要赠送游戏币的个数。
  273. * @param type $userip (可选)用户的外网IP
  274. * @return V3Return
  275. */
  276. function msdk_present($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $discountid, $giftid, $presenttimes)
  277. {
  278. $params = array(
  279. 'openid' => $openid,
  280. 'openkey' => $openkey,
  281. 'pay_token' => $paytoken,
  282. 'pf' => $pf,
  283. 'pfkey' => $pfkey,
  284. 'appid' => $appid,
  285. 'zoneid' => $zoneid,
  286. 'ts' => $ts,
  287. 'discountid' => $discountid,
  288. 'giftid' => $giftid,
  289. 'presenttimes' => $presenttimes,
  290. // 'userip' => $userip, // (可选) 用户的外网IP
  291. // 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果
  292. );
  293. // 这个需要在cookie里面传一些参数
  294. $cookie = self::ymsdk_makeCookie($platform);
  295. $cookie['org_loc'] = "/mpay/present_m";
  296. return $this->msdk_Api('/mpay/present_m', $params, $cookie, 'get');
  297. }
  298. /**
  299. * 查询游戏币余额接口
  300. * @param type $openid
  301. * @param type $openkey
  302. * @param type $pf
  303. * @param type $paytoken
  304. * @param type $appid
  305. * @param type $pfkey
  306. * @param type $ts
  307. * @param str $zoneid 分区Id
  308. * @return V3Return
  309. */
  310. function msdk_get_balance($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid)
  311. {
  312. $params = array(
  313. 'openid' => $openid,
  314. 'openkey' => $openkey,
  315. 'pay_token' => $paytoken,
  316. 'appid' => $appid,
  317. 'ts' => $ts,
  318. 'pf' => $pf,
  319. 'pfkey' => $pfkey,
  320. 'zoneid' => $zoneid,
  321. // 'userip' => $userip, // (可选) 用户的外网IP
  322. // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common
  323. // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果
  324. );
  325. // 这个需要在cookie里面传一些参数
  326. $cookie = self::ymsdk_makeCookie($platform);
  327. $cookie['org_loc'] = "/mpay/get_balance_m";
  328. return $this->msdk_Api('/mpay/get_balance_m', $params, $cookie, 'get');
  329. }
  330. /**
  331. * 扣除游戏币接口
  332. * @param string $platform
  333. * @param string $openid
  334. * @param string $openkey
  335. * @param string $pf
  336. * @param string $paytoken
  337. * @param string $appid
  338. * @param string $pfkey
  339. * @param int $ts
  340. * @param string $sig
  341. * @param int $amt 扣游戏币数量。
  342. * @param type $payitem 道具名称。
  343. * @param type $appremark 备注。会写到账户流水。
  344. * @return V3Return
  345. */
  346. function msdk_pay($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $amt, $payitem, $appremark)
  347. {
  348. $params = array(
  349. 'openid' => $openid,
  350. 'openkey' => $openkey,
  351. 'pay_token' => $paytoken,
  352. 'appid' => $appid,
  353. 'ts' => $ts,
  354. 'pf' => $pf,
  355. 'pfkey' => $pfkey,
  356. 'zoneid' => $zoneid,
  357. 'amt' => $amt,
  358. 'payitem' => $payitem, // (可选)道具名称
  359. // 'userip' => $userip, // (可选) 用户的外网IP
  360. // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common
  361. // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果
  362. 'appremark' => $appremark // (可选)备注。会写到账户流水。
  363. );
  364. // 这个需要在cookie里面传一些参数
  365. $cookie = self::ymsdk_makeCookie($platform);
  366. $cookie['org_loc'] = "/mpay/pay_m";
  367. return $this->msdk_Api('/mpay/pay_m', $params, $cookie, 'get');
  368. }
  369. /**
  370. * 取消支付接口
  371. * @param type $openid
  372. * @param type $openkey
  373. * @param type $pf
  374. * @param type $paytoken
  375. * @param type $appid
  376. * @param type $pfkey
  377. * @param type $ts
  378. * @param type $amt 扣游戏币数量
  379. * @param type $billno 预扣流水号
  380. * @param type $userip (可选)用户的外网ip
  381. * @param type $accounttype (可选)账户类型,基础货币(common)安全货币(security),不填默认common
  382. * @return V3Return
  383. */
  384. function msdk_cancel_pay($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $amt, $billno)
  385. {
  386. $params = array(
  387. 'openid' => $openid,
  388. 'openkey' => $openkey,
  389. 'pay_token' => $paytoken,
  390. 'appid' => $appid,
  391. 'ts' => $ts,
  392. 'pf' => $pf,
  393. 'pfkey' => $pfkey,
  394. 'zoneid' => $zoneid,
  395. 'amt' => $amt,
  396. 'billno' => $billno,
  397. // 'userip' => $userip, // (可选) 用户的外网IP
  398. // 'accounttype' => $accounttype // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common
  399. // 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果
  400. );
  401. // 这个需要在cookie里面传一些参数
  402. $cookie = self::ymsdk_makeCookie($platform);
  403. $cookie['org_loc'] = "/mpay/cancel_pay_m";
  404. return $this->msdk_Api('/mpay/cancel_pay_m', $params, $cookie, 'get');
  405. }
  406. //</editor-fold>
  407. //
  408. //<editor-fold defaultstate="collapsed" desc="---------- YSDK 移动端支付 -----------">
  409. /**
  410. * 移动支付api
  411. * @param string $script_name 调用的API方法,比如/mpay/present_m,参考 http://wiki.mg.open.qq.com/index.php?title=Android%E6%94%AF%E4%BB%98API
  412. * @param array $params 调用API时带的参数
  413. * @param string $method 请求方法 post / get
  414. * @param string $protocol 协议类型 https
  415. * @return type 结果
  416. */
  417. private function ysdk_Api($script_name, $params, $cookie = array(), $method = 'post', $protocol = 'https')
  418. {
  419. $this->sdk->setServerName(YSDK_HOST); // 设置sdk服务端地址
  420. // $ret = $this->sdk->api($script_name, $params, $cookie, $method, $protocol);
  421. $ret = $this->sdk->ymsdk_api($script_name, $params, $cookie, $method, $protocol);
  422. $this->sdk->setServerName(V3_HOST);
  423. return $ret;
  424. }
  425. /**
  426. * 查询游戏币余额接口
  427. * @param type $sessionId
  428. * @param type $sessionType
  429. * @param type $openid
  430. * @param type $openkey
  431. * @param type $pf
  432. * @param type $appid
  433. * @param type $pfkey
  434. * @param type $ts
  435. * @return type
  436. */
  437. function ysdk_get_balance($sessionId, $sessionType, $openid, $openkey, $pf, $appid, $pfkey, $ts)
  438. {
  439. $params = array(
  440. 'openid' => $openid,
  441. 'openkey' => $openkey,
  442. 'appid' => $appid,
  443. 'ts' => $ts,
  444. 'pf' => $pf,
  445. 'pfkey' => $pfkey,
  446. 'zoneid' => 1, // 多平台版本,在腾讯没有设置多分区信息
  447. // 'userip' => $userip, // (可选) 用户的外网IP
  448. // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common
  449. // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果
  450. );
  451. // 这个需要在cookie里面传一些参数
  452. $cookie = self::ymsdk_makeCookie($sessionId, $sessionType, "/mpay/get_balance_m");
  453. return $this->ysdk_Api('/mpay/get_balance_m', $params, $cookie, "get"); // ysdk在这里比msdk多加了个/v3/r
  454. }
  455. /**
  456. * 扣除游戏币接口
  457. * @param type $sessionId
  458. * @param type $sessionType
  459. * @param type $openid
  460. * @param type $openkey
  461. * @param type $pf
  462. * @param type $appid
  463. * @param type $pfkey
  464. * @param type $ts
  465. * @param int $amt 扣游戏币数量。
  466. * @param string $billno 订单号,业务自定义,业务需要确保全局的唯一性;相同的订单号不会重复扣款。长度不超过63字节,数字和字符不限,不能包含特殊字符如&= | % ^ + 等即可
  467. * @param string $payitem 道具名称。
  468. * @param string $appremark 备注。会写到账户流水。
  469. * @return V3Return
  470. */
  471. function ysdk_pay($sessionId, $sessionType, $openid, $openkey, $pf, $appid, $pfkey, $ts, $amt, $billno, $payitem, $appremark)
  472. {
  473. $params = array(
  474. 'openid' => $openid,
  475. 'openkey' => $openkey,
  476. 'appid' => $appid,
  477. 'ts' => $ts,
  478. 'pf' => $pf,
  479. 'pfkey' => $pfkey,
  480. 'zoneid' => 1,
  481. 'amt' => $amt,
  482. 'billno' => $billno, // 预扣流水号(业务自己定义,业务需要确保全局唯一性;
  483. // 相同的订单号不会重复扣款,长度不超过63个字节,数字字符不限,不能包含特殊字符&|=%^+等即可)
  484. 'payitem' => $payitem, // (可选)道具名称
  485. // 'userip' => $userip, // (可选) 用户的外网IP
  486. // 'accounttype' => $accounttype, // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common
  487. // 'format' => "json", // (可选)json、jsonp_$func。 默认json。如果
  488. 'appremark' => $appremark // (可选)备注。会写到账户流水。
  489. );
  490. // 这个需要在cookie里面传一些参数
  491. $cookie = self::ymsdk_makeCookie($sessionId, $sessionType, "/mpay/pay_m");
  492. return $this->ysdk_Api('/mpay/pay_m', $params, $cookie, "get"); // ysdk在这里比msdk多加了个/v3/r
  493. }
  494. //
  495. //<editor-fold defaultstate="collapsed" desc="未启用">
  496. // /**
  497. // * 赠送游戏币接口,应用在后台自助申请赠送游戏币的营销活动,获取到活动号和礼包ID后
  498. // * 调用本接口赠送。赠送的游戏币不参与结算分成。
  499. // * @param str $platform 1 微信 2 手Q
  500. // * @param str $openid
  501. // * @param str $openkey
  502. // * @param str $pf
  503. // * @param str $appid
  504. // * @param str $pfkey
  505. // * @param int $ts
  506. // * @param str $zoneid 分区Id
  507. // * @param str $discountid 赠送营销活动ID。(营销平台申请)
  508. // * @param type $giftid 礼品ID。(营销平台申请)
  509. // * @param type $presenttimes 赠送礼品的次数。如果配置的礼包ID对应1个游戏币,那么本字段表示要赠送游戏币的个数。
  510. // * @param type $userip (可选)用户的外网IP
  511. // * @return V3Return
  512. // */
  513. // function ysdks_present($platform, $openid, $openkey, $pf, $appid, $pfkey, $ts, $zoneid, $discountid, $giftid, $presenttimes) {
  514. // $params = array(
  515. // 'openid' => $openid,
  516. // 'openkey' => $openkey,
  517. // 'pf' => $pf,
  518. // 'pfkey' => $pfkey,
  519. // 'appid' => $appid,
  520. // 'zoneid' => $zoneid,
  521. // 'ts' => $ts,
  522. // 'discountid' => $discountid,
  523. // 'giftid' => $giftid,
  524. // 'presenttimes' => $presenttimes,
  525. //// 'userip' => $userip, // (可选) 用户的外网IP
  526. //// 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果
  527. // );
  528. // // 这个需要在cookie里面传一些参数
  529. // $cookie = self::m_makeCookie($platform);
  530. // $cookie['org_loc'] = "/mpay/present_m";
  531. //
  532. // return $this->m_Api('/mpay/present_m', $params, $cookie, 'get');
  533. // }
  534. // /**
  535. // * 取消支付接口
  536. // * @param type $openid
  537. // * @param type $openkey
  538. // * @param type $pf
  539. // * @param type $paytoken
  540. // * @param type $appid
  541. // * @param type $pfkey
  542. // * @param type $ts
  543. // * @param type $amt 扣游戏币数量
  544. // * @param type $billno 预扣流水号
  545. // * @param type $userip (可选)用户的外网ip
  546. // * @param type $accounttype (可选)账户类型,基础货币(common)安全货币(security),不填默认common
  547. // * @return V3Return
  548. // */
  549. // function ysdk_cancel_pay($platform, $openid, $openkey, $pf, $paytoken, $appid, $pfkey, $ts, $zoneid, $amt, $billno) {
  550. // $params = array(
  551. // 'openid' => $openid,
  552. // 'openkey' => $openkey,
  553. // 'pay_token' => $paytoken,
  554. // 'appid' => $appid,
  555. // 'ts' => $ts,
  556. // 'pf' => $pf,
  557. // 'pfkey' => $pfkey,
  558. // 'zoneid' => $zoneid,
  559. // 'amt' => $amt,
  560. // 'billno' => $billno,
  561. //// 'userip' => $userip, // (可选) 用户的外网IP
  562. //// 'accounttype' => $accounttype // (可选)帐户类型ID, 基础货币(common) 安全货币(security), 不填默认common
  563. //// 'format' => "json" // (可选)json、jsonp_$func。 默认json。如果
  564. // );
  565. // // 这个需要在cookie里面传一些参数
  566. // $cookie = self::m_makeCookie($platform);
  567. // $cookie['org_loc'] = "/mpay/cancel_pay_m";
  568. // return $this->m_Api('/mpay/cancel_pay_m', $params, $cookie, 'get');
  569. // }
  570. //</editor-fold>
  571. //
  572. /**
  573. * 生成ysdk所需cookie
  574. * @param type $sessionId
  575. * @param type $sessionType
  576. * @param type $org_loc
  577. * @return string
  578. */
  579. static function ymsdk_makeCookie($sessionId, $sessionType, $org_loc)
  580. {
  581. $cookie = array();
  582. $cookie['session_id'] = $sessionId;
  583. $cookie['session_type'] = $sessionType;
  584. $cookie['org_loc'] = $org_loc;
  585. return $cookie;
  586. }
  587. //</editor-fold>
  588. //
  589. //<editor-fold desc="================支付类API=================">
  590. /**
  591. * ================支付类API=================
  592. * 主要使用场景:应用中需要实现道具购买/寄售逻辑时。
  593. */
  594. /**
  595. * 购买付费道具[Q点直购]
  596. * @param type $openid
  597. * @param type $openkey
  598. * @param type $pf
  599. * @param type $pfkey
  600. * @param type $ts 时间戳
  601. * @param type $itemID 道具id
  602. * @param type $itemPrice 道具单价
  603. * @param type $itemName 道具名称
  604. * @param type $itemDes 道具描述
  605. * @param type $goodsurl 道具图url
  606. * @return type
  607. */
  608. function pay_buy_goods($openid, $openkey, $pf, $pfkey, $ts, $itemID, #
  609. $itemPrice, $itemName, $itemDes, $goodsurl, $zoneid = 0
  610. )
  611. {
  612. $cee_extend = getenv("CEE_DOMAINNAME") . '*' . getenv("CEE_VERSIONID") . '*' . getenv("CEE_WSNAME");
  613. $params = array(
  614. 'openid' => $openid,
  615. 'openkey' => $openkey,
  616. 'pf' => $pf,
  617. 'pfkey' => $pfkey,
  618. 'ts' => $ts,
  619. 'payitem' => $itemID . '*' . $itemPrice . '*1',
  620. 'appmode' => "1",
  621. 'max_num' => "1",
  622. 'goodsmeta' => $itemName . '*' . $itemDes,
  623. 'goodsurl' => $goodsurl,
  624. 'zoneid' => $zoneid,
  625. 'cee_extend' => $cee_extend,
  626. );
  627. // echo json_encode($params);
  628. return $this->sdk->api('/v3/pay/buy_goods', $params, array(), 'post', 'https');
  629. }
  630. /**
  631. * 确认支付
  632. * @param type $openid
  633. * @param type $openkey
  634. * @param type $pf
  635. * @param type $ts
  636. * @param type $payitem
  637. * @param type $token
  638. * @param type $billno
  639. * @param type $amt
  640. * @return type
  641. */
  642. function pay_confirm_delivery($openid, $openkey, $pf, $ts, $payitem, $token, $billno, $amt
  643. )
  644. {
  645. $params = array(
  646. 'openid' => $openid,
  647. 'openkey' => $openkey,
  648. 'pf' => $pf,
  649. 'ts' => $ts,
  650. 'payitem' => $payitem,
  651. 'token_id' => $token,
  652. 'billno' => $billno,
  653. 'version' => "v3",
  654. 'zoneid' => "0",
  655. 'providetype' => "0",
  656. 'provide_errno' => "0",
  657. 'provide_errmsg' => "OK",
  658. 'amt' => $amt,
  659. 'payamt_coins' => "0",
  660. 'pubacct_payamt_coins' => "0",
  661. );
  662. return $this->sdk->api('/v3/pay/confirm_delivery', $params, array(), array(), 'post', 'https');
  663. }
  664. //</editor-fold>
  665. //
  666. //
  667. //<editor-fold defaultstate="collapsed" desc="================营销类API=================">
  668. /**
  669. * ================营销类API=================
  670. * 主要使用场景:支付接入的时候必须要实现黄钻特权体系。
  671. */
  672. /**
  673. * 获得每日礼包(含新手礼包)(点击每日/新手礼包时,调用本接口获得token)
  674. * 或者开通包月礼包(开通业务或续费业务,用户点击活动入口时,调用此接口获取token)
  675. * @param type $openid
  676. * @param type $openkey
  677. * @param type $pf
  678. * @param type $pfkey
  679. * @param type $tokentype
  680. * token的类型。
  681. * 1:表示该token为每日礼包赠送、开通包月送礼包营销活动中的赠送道具/物品的token。
  682. * 2:表示该token为任务买卖市场营销活动中的领取奖励的token。
  683. * @param type $discountid 营销活动的actorID或者任务集市中的“商品ID”
  684. * @param type $ts
  685. * @return type
  686. */
  687. function pay_gift_get_token($openid, $openkey, $pf, $pfkey, $tokentype, $discountid, $ts, $zoneid = 0
  688. )
  689. {
  690. $cee_extend = getenv("CEE_DOMAINNAME") . '*' . getenv("CEE_VERSIONID") . '*' . getenv("CEE_WSNAME");
  691. $params = array(
  692. 'openid' => $openid,
  693. 'openkey' => $openkey,
  694. 'pf' => $pf,
  695. 'pfkey' => $pfkey,
  696. 'tokentype' => $tokentype,
  697. 'discountid' => $discountid,
  698. 'ts' => $ts,
  699. 'version' => "v3",
  700. 'zoneid' => $zoneid,
  701. 'cee_extend' => $cee_extend
  702. );
  703. return $this->sdk->api('/v3/pay/get_token', $params, array(), 'post', 'https');
  704. }
  705. //</editor-fold>
  706. //
  707. //<editor-fold defaultstate="collapsed" desc="================公会Q群=====================">
  708. /**
  709. * 查询玩家已加入的公会QQ群列表
  710. * @param type $openid
  711. * @param type $openkey
  712. * @param type $pf
  713. * @return type
  714. */
  715. function is_qqgroupmember($openid, $openkey, $pf)
  716. {
  717. $params = array(
  718. 'openid' => $openid,
  719. 'openkey' => $openkey,
  720. 'pf' => $pf
  721. );
  722. return $this->sdk->api('/v3/qqgroup/is_group_member', $params, 'post');
  723. }
  724. /**
  725. * 查询公会QQ群中安装了本应用的成员列表
  726. * @param type $openid
  727. * @param type $openkey
  728. * @param type $pf
  729. * @param type $group_openid
  730. * @param type $guildId
  731. * @param type $page >=1
  732. * @return type
  733. */
  734. function get_app_qqgroupmembers($openid, $openkey, $pf, $group_openid, $guildId, $page = 1
  735. )
  736. {
  737. $params = array(
  738. 'openid' => $openid,
  739. 'openkey' => $openkey,
  740. 'pf' => $pf,
  741. 'group_openid' => $group_openid,
  742. 'union_id' => $guildId,
  743. 'page' => $page,
  744. 'zone' => 0
  745. );
  746. return $this->sdk->api('/v3/qqgroup/get_app_groupmembers', $params, array(), 'post');
  747. }
  748. /**
  749. * 解绑公会QQ群
  750. * @param type $openid
  751. * @param type $openkey
  752. * @param type $pf
  753. * @param type $group_openid
  754. * @param type $guildId
  755. * @return type
  756. */
  757. function unbind_qqgroup($openid, $openkey, $pf, $group_openid, $guildId
  758. )
  759. {
  760. $params = array(
  761. 'openid' => $openid,
  762. 'openkey' => $openkey,
  763. 'pf' => $pf,
  764. 'group_openid' => $group_openid,
  765. 'union_id' => $guildId
  766. );
  767. return $this->sdk->api('/v3/qqgroup/unbind_qqgroup', $params, array(), 'post');
  768. }
  769. //</editor-fold>
  770. //<editor-fold defaultstate="collapsed" desc="================关系链类API=================">
  771. /**
  772. * ================关系链类API=================
  773. * 主要使用场景:应用中需要用户之间进行互动时。
  774. */
  775. /**
  776. * 获取安装了应用的平台好友
  777. * @param type $openid
  778. * @param type $openkey
  779. * @param type $pf
  780. * @return type
  781. */
  782. function relation_get_app_friends($openid, $openkey, $pf)
  783. {
  784. $params = $this->getParams($openid, $openkey, $pf);
  785. return $this->sdk->api('/v3/relation/get_app_friends', $params, array(), 'post');
  786. }
  787. /**
  788. * 验证是否是好友
  789. * @param type $openid
  790. * @param type $openkey
  791. * @param type $pf
  792. * @param type $fopenid
  793. * @return type
  794. */
  795. function relation_is_friend($openid, $openkey, $pf, $fopenid)
  796. {
  797. $params = array(
  798. 'openid' => $openid,
  799. 'openkey' => $openkey,
  800. 'pf' => $pf,
  801. 'fopenid' => $fopenid,
  802. );
  803. return $this->sdk->api('/v3/relation/is_friend', $params, array(), 'post');
  804. }
  805. //</editor-fold>
  806. //<editor-fold defaultstate="collapsed" desc="================应用推广类API===============">
  807. /**
  808. * ================应用推广类API=================
  809. * 主要使用场景:应用中需要实现新用户/活跃用户增长时。
  810. */
  811. function spread_verify_invkey($openid, $openkey, $pf, $invkey, $itime, $iopenid)
  812. {
  813. $params = array(
  814. 'openid' => $openid,
  815. 'openkey' => $openkey,
  816. 'pf' => $pf,
  817. 'invkey' => $invkey,
  818. 'itime' => $itime,
  819. 'iopenid' => $iopenid,
  820. );
  821. return $this->sdk->api('/v3/spread/verify_invkey', $params, array(), 'post');
  822. }
  823. //</editor-fold>
  824. //
  825. //
  826. }
  827. ////</editor-fold>