pay.action.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | FANWE 直播系统
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: 云淡风轻(1956838968@qq.com)
  8. // +----------------------------------------------------------------------
  9. class payModule extends baseModule
  10. {
  11. /**
  12. * 用户充值界面
  13. */
  14. public function recharge(){
  15. $root = array();
  16. $root['status'] = 1;
  17. //$GLOBALS['user_info']['id'] = 320;
  18. if(!$GLOBALS['user_info']){
  19. $root['error'] = "用户未登陆,请先登陆.";
  20. $root['status'] = 0;
  21. $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
  22. }else{
  23. $user_id = intval($GLOBALS['user_info']['id']);//用户ID
  24. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php');
  25. $user_redis = new UserRedisService();
  26. $root['diamonds'] = $user_redis->getOne_db($user_id,'diamonds');
  27. $root['coin'] = $user_redis->getOne_db($user_id,'coin');
  28. /*
  29. $sql = "select diamonds from ".DB_PREFIX."user where id = ".$user_id;
  30. $root['diamonds'] = $GLOBALS['db']->getOne($sql,true,true);
  31. */
  32. //$sql = "select id,name,class_name,logo from ".DB_PREFIX."payment where is_effect = 1 and online_pay = 3 order by sort";
  33. //$pay_list = $GLOBALS['db']->getAll($sql,true,true);
  34. if(intval(MORE_ALIPAY)){
  35. $pay_list_alipay = load_auto_cache("pay_list_alipay");
  36. $pay_list_other = load_auto_cache("pay_list_other");
  37. $pay_list = array_merge($pay_list_alipay,$pay_list_other);
  38. }else{
  39. $pay_list = load_auto_cache("pay_list");
  40. }
  41. $rule_list = load_auto_cache("rule_list");
  42. //加载苹果支付价格
  43. $iap_rule_list = load_auto_cache("iparule_list");
  44. $ali_rule_list = load_auto_cache("aliprule_list");
  45. $wx_rule_list = load_auto_cache("wxrule_list");
  46. foreach ( $pay_list as $k => $v )
  47. {
  48. $list = $rule_list;
  49. if ($v['class_name'] == 'Iappay') {
  50. if(is_array($iap_rule_list)){
  51. $list = $iap_rule_list;
  52. }
  53. }
  54. if (strstr($v['class_name'],'Aliapp')) {
  55. if (is_array($ali_rule_list)) {
  56. $list = $ali_rule_list;
  57. }
  58. }
  59. if ($v['class_name'] == 'WxApp') {
  60. if(is_array($wx_rule_list)){
  61. $list = $wx_rule_list;
  62. }
  63. }
  64. if (($GLOBALS['user_info']['mobile'] != '13888888888' || $GLOBALS['user_info']['mobile'] != '13999999999' )&&intval(OPEN_GAME_MODULE)) {
  65. foreach ($list as $key => $value) {
  66. $list[$key]['gift_coins_des'] = $value['gift_coins'] ? ('赠送' . $value['gift_coins'] . '游戏币') : '';
  67. $list[$key]['money_name'] = $this->get_money_name($value['money']);
  68. }
  69. }else{
  70. foreach ($list as $key => $value) {
  71. $list[$key]['gift_coins_des'] = '';
  72. $list[$key]['money_name'] = $this->get_money_name($value['money']);
  73. }
  74. }
  75. $pay_list[$k]['rule_list'] = $list;
  76. }
  77. $m_config = load_auto_cache("m_config");
  78. $list = array();
  79. //客服端手机类型dev_type=android;dev_type=ios
  80. $dev_type = strim($_REQUEST['sdk_type']);
  81. if (isios() || $dev_type == 'ios'){
  82. //正在审核的版本,只显示:苹果支付
  83. //审核帐户,只显示苹果应用内支付
  84. if ($GLOBALS['user_info']['mobile'] == '13888888888' || $GLOBALS['user_info']['mobile'] == '13999999999' ){
  85. $sql = "select id,name,class_name,logo from ".DB_PREFIX."payment where class_name = 'Iappay' limit 0,1";
  86. $pay_list = $GLOBALS['db']->getAll($sql,true,true);
  87. if(!$pay_list){
  88. $root['error'] = "请安装苹果支付,并设置无效";
  89. $root['status'] = 0;
  90. ajax_return($root);
  91. }
  92. $rule_list = load_auto_cache("iparule_list");
  93. $list = $pay_list;
  94. }else{
  95. $ios_open_pay = intval($m_config['ios_open_pay']);//IOS默认只支持支持应用内支付,需要开放其它支付选是;
  96. $sdk_version_name = strim($_REQUEST['sdk_version_name']);
  97. if ($m_config['ios_check_version'] != '' && $m_config['ios_check_version'] == $sdk_version_name || $ios_open_pay == 0){
  98. foreach ( $pay_list as $k => $v )
  99. {
  100. if ($v['class_name'] != 'Iappay'){
  101. unset($pay_list[$k]);
  102. //$pay_list[$k]['name'] = $v['class_name'].'aa';
  103. }else{
  104. //$pay_list[$k]['name'] = $v['class_name'];
  105. $list[] = $v;
  106. }
  107. }
  108. }else{
  109. //配合IOS端去除ALIPAY
  110. foreach ( $pay_list as $k => $v )
  111. {
  112. if (strstr($v['class_name'],'Aliapp')) {
  113. unset($pay_list[$k]);
  114. }else {
  115. $list[] = $v;
  116. }
  117. }
  118. }
  119. }
  120. }else{
  121. //过滤苹果支付
  122. foreach ( $pay_list as $k => $v )
  123. {
  124. if ($v['class_name'] == 'Iappay'){
  125. unset($pay_list[$k]);
  126. }else{
  127. $list[] = $v;
  128. }
  129. }
  130. }
  131. if($list){
  132. $root['pay_list'] = $list;
  133. }else{
  134. //请求验证
  135. $data['error'] = '无任何支付方式';
  136. log_err_file(array(__FILE__,__LINE__,__METHOD__,$data));
  137. }
  138. //$sql = "select id,name,money,(diamonds + gift_diamonds) as diamonds from ".DB_PREFIX."recharge_rule where is_effect = 1 and is_delete = 0 order by sort";
  139. //$rule_list = $GLOBALS['db']->getAll($sql,true,true);
  140. $root['show_other'] = 1;//显示其它(用户直接输入充值金额)
  141. foreach ( $pay_list as $k => $v )
  142. {
  143. if ($v['class_name'] == 'Iappay'){
  144. $root['show_other'] = 0;//显示其它(用户直接输入充值金额
  145. //苹果价格已经独立 iap_recharge 参数可以移除
  146. /* if(intval($m_config['iap_recharge'])==0){
  147. foreach($rule_list as $k=>$v){
  148. $rule_list[$k]['money'] = $v['iap_money'];
  149. }
  150. }*/
  151. }
  152. }
  153. if (($GLOBALS['user_info']['mobile'] != '13888888888' || $GLOBALS['user_info']['mobile'] != '13999999999' )&&intval(OPEN_GAME_MODULE)) {
  154. foreach ($rule_list as $k => $v) {
  155. $rule_list[$k]['gift_coins_des'] = $v['gift_coins'] ? ('赠送' . $v['gift_coins'] . '游戏币') : '';
  156. $rule_list[$k]['gift_coins_dec'] = $v['gift_coins'] ? ('赠送' . $v['gift_coins'] . '游戏币') : '';
  157. $rule_list[$k]['money_name'] = $this->get_money_name($v['money']);
  158. }
  159. }else{
  160. foreach ($rule_list as $k => $v) {
  161. $rule_list[$k]['gift_coins_des'] = '';
  162. $rule_list[$k]['gift_coins_dec'] = '';
  163. $rule_list[$k]['money_name'] = $this->get_money_name($v['money']);
  164. }
  165. }
  166. $root['rule_list'] = $rule_list;
  167. $root['exchange_rate'] = $m_config['coin_exchange_rate'] ? floatval($m_config['coin_exchange_rate']) : 1;
  168. $diamonds_rate = intval($m_config['diamonds_rate']);
  169. if ($diamonds_rate == 0){
  170. $root['show_other'] = 0;//显示其它(用户直接输入充值金额
  171. }
  172. $root['rate'] = $diamonds_rate;//充值金额与钻石的换算比率如:充值1元,可以获得10个钻石
  173. }
  174. ajax_return($root);
  175. }
  176. /**
  177. * 用户充值支付
  178. */
  179. public function pay(){
  180. $root = array();
  181. $root['status'] = 1;
  182. //$GLOBALS['user_info']['id'] = 1;
  183. if(!$GLOBALS['user_info']){
  184. $root['error'] = "用户未登陆,请先登陆.";
  185. $root['status'] = 0;
  186. $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
  187. }else{
  188. $user_id = intval($GLOBALS['user_info']['id']);//用户ID
  189. $pay_id = intval($_REQUEST['pay_id']);//支付id
  190. $rule_id = intval($_REQUEST['rule_id']);//支付项目id
  191. $money = floatval($_REQUEST['money']);//支付金额
  192. if($pay_id == 0){
  193. $root['error'] = "支付id无效";
  194. $root['status'] = 0;
  195. }elseif($rule_id == 0 && $money == 0){
  196. $root['error'] = "项目id无效或充值金额不能为0";
  197. $root['status'] = 0;
  198. }else{
  199. $sql = "select id,name,class_name,logo from ".DB_PREFIX."payment where online_pay in (3,4) and id =".$pay_id;
  200. $pay = $GLOBALS['db']->getRow($sql,true,true);
  201. if ($rule_id > 0){
  202. $sql = "select money,name,iap_money,product_id,(diamonds+gift_diamonds) as diamonds from ".DB_PREFIX."recharge_rule where is_effect = 1 and is_delete = 0 and id =".$rule_id;
  203. $rule = $GLOBALS['db']->getRow($sql,true,true);
  204. if ($pay['class_name'] == 'Iappay'){
  205. $money = $rule['iap_money'];
  206. }else{
  207. $money = $rule['money'];
  208. }
  209. $diamonds = $rule['diamonds'];
  210. }else if ($money > 0){
  211. $m_config = load_auto_cache("m_config");
  212. $diamonds_rate = intval($m_config['diamonds_rate']);
  213. $diamonds = intval($money * $diamonds_rate);
  214. }else{
  215. $pay = null;
  216. $money = 0;
  217. }
  218. if(!$pay || $money == 0){
  219. $root['error'] = "支付id或 项目id无效";
  220. $root['status'] = 0;
  221. }else{
  222. if ($pay['class_name'] != 'Iappay'){
  223. $payment_notice['create_time'] = NOW_TIME;
  224. $payment_notice['user_id'] = $user_id;
  225. $payment_notice['payment_id'] = $pay_id;
  226. $payment_notice['money'] = $money;
  227. $payment_notice['diamonds'] = $diamonds;//充值时,获得的钻石数量
  228. //$payment_notice['bank_id'] = '';//strim($_REQUEST['bank_id']);
  229. if ($rule_id > 0){
  230. $payment_notice['recharge_id'] = $rule_id;
  231. $payment_notice['recharge_name'] = $rule['name'];
  232. $payment_notice['product_id'] = $rule['product_id'];
  233. }else{
  234. $payment_notice['recharge_name'] = '自定义充值';
  235. }
  236. do{
  237. $payment_notice['notice_sn'] = to_date(NOW_TIME,"YmdHis").rand(100,999);
  238. $GLOBALS['db']->autoExecute(DB_PREFIX."payment_notice",$payment_notice,"INSERT","","SILENT");
  239. $notice_id = $GLOBALS['db']->insert_id();
  240. }while($notice_id==0);
  241. }else{
  242. $notice_id = $rule['product_id'];
  243. }
  244. $class_name = $pay['class_name']."_payment";
  245. fanwe_require(APP_ROOT_PATH."system/payment/".$class_name.".php");
  246. $o = new $class_name;
  247. $pay= $o->get_payment_code($notice_id);
  248. $root['pay'] = $pay;
  249. }
  250. }
  251. }
  252. ajax_return($root);
  253. }
  254. /**
  255. * 苹果应用内支付成功后,回调
  256. */
  257. public function iappay(){
  258. $root = array();
  259. $root['status'] = 1;
  260. //$GLOBALS['user_info']['id'] = 320;
  261. if(!$GLOBALS['user_info']){
  262. $root['error'] = "用户未登陆,请先登陆.";
  263. $root['status'] = 0;
  264. $root['user_login_status'] = 0;//有这个参数: user_login_status = 0 时,表示服务端未登陆、要求登陆,操作
  265. }else{
  266. $user_id = intval($GLOBALS['user_info']['id']);//用户ID
  267. $receipt_data = strim($_REQUEST['receipt-data']);
  268. //$receipt_data = 'ewoJInNpZ25hdHVyZSIgPSAiQXhjNnZsQWYybnRXYWJTODZTTDFBaXZYUG93VStHNkVCak9Bd0pWT2pHVzNlK0RzRUN3V3NQZHVZZ28vUmx1b3c2Y0RPcUdKRlhGbzUxS0orZGFLdDZUREN1R2tTRG8vQUpJL1FTdGgrVldBQ3lGQlNDSElOUVNSQm9Oa3UxRi8yaHFOWjFCRFc2MjFrOTc3M05SWWdZLzN4MFc3Q2NmUFhiQjJzVjRuV051WkVqY0hONWV2RGVEL2t4UFpvby8xQThBT0g0WEpKZFR1Sy9iUmpDeTd2OGF0RkVkSFpLQ1ZoSDRlbXcwQjBrU1hKaEhtLzUwWUhQc1N2ZTV3UGxubitGbWl5NnIyMnFwY0x3UEl5NStuNzYyYjNvUGkxcXZrQllCTlRHbXozeXRzVTlPdFZMNGNxU0Y0WUZVb1U0UDQrRDdYQXFNSG1uZnFyL1JCN1dKVDZSY0FBQVdBTUlJRmZEQ0NCR1NnQXdJQkFnSUlEdXRYaCtlZUNZMHdEUVlKS29aSWh2Y05BUUVGQlFBd2daWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Td3dLZ1lEVlFRTERDTkJjSEJzWlNCWGIzSnNaSGRwWkdVZ1JHVjJaV3h2Y0dWeUlGSmxiR0YwYVc5dWN6RkVNRUlHQTFVRUF3dzdRWEJ3YkdVZ1YyOXliR1IzYVdSbElFUmxkbVZzYjNCbGNpQlNaV3hoZEdsdmJuTWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhrd0hoY05NVFV4TVRFek1ESXhOVEE1V2hjTk1qTXdNakEzTWpFME9EUTNXakNCaVRFM01EVUdBMVVFQXd3dVRXRmpJRUZ3Y0NCVGRHOXlaU0JoYm1RZ2FWUjFibVZ6SUZOMGIzSmxJRkpsWTJWcGNIUWdVMmxuYm1sdVp6RXNNQ29HQTFVRUN3d2pRWEJ3YkdVZ1YyOXliR1IzYVdSbElFUmxkbVZzYjNCbGNpQlNaV3hoZEdsdmJuTXhFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlUQWxWVE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcGMrQi9TV2lnVnZXaCswajJqTWNqdUlqd0tYRUpzczl4cC9zU2cxVmh2K2tBdGVYeWpsVWJYMS9zbFFZbmNRc1VuR09aSHVDem9tNlNkWUk1YlNJY2M4L1cwWXV4c1FkdUFPcFdLSUVQaUY0MWR1MzBJNFNqWU5NV3lwb041UEM4cjBleE5LaERFcFlVcXNTNCszZEg1Z1ZrRFV0d3N3U3lvMUlnZmRZZUZScjZJd3hOaDlLQmd4SFZQTTNrTGl5a29sOVg2U0ZTdUhBbk9DNnBMdUNsMlAwSzVQQi9UNXZ5c0gxUEttUFVockFKUXAyRHQ3K21mNy93bXYxVzE2c2MxRkpDRmFKekVPUXpJNkJBdENnbDdaY3NhRnBhWWVRRUdnbUpqbTRIUkJ6c0FwZHhYUFEzM1k3MkMzWmlCN2o3QWZQNG83UTAvb21WWUh2NGdOSkl3SURBUUFCbzRJQjF6Q0NBZE13UHdZSUt3WUJCUVVIQVFFRU16QXhNQzhHQ0NzR0FRVUZCekFCaGlOb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBekxYZDNaSEl3TkRBZEJnTlZIUTRFRmdRVWthU2MvTVIydDUrZ2l2Uk45WTgyWGUwckJJVXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCU0lKeGNKcWJZWVlJdnM2N3IyUjFuRlVsU2p0ekNDQVI0R0ExVWRJQVNDQVJVd2dnRVJNSUlCRFFZS0tvWklodmRqWkFVR0FUQ0IvakNCd3dZSUt3WUJCUVVIQWdJd2diWU1nYk5TWld4cFlXNWpaU0J2YmlCMGFHbHpJR05sY25ScFptbGpZWFJsSUdKNUlHRnVlU0J3WVhKMGVTQmhjM04xYldWeklHRmpZMlZ3ZEdGdVkyVWdiMllnZEdobElIUm9aVzRnWVhCd2JHbGpZV0pzWlNCemRHRnVaR0Z5WkNCMFpYSnRjeUJoYm1RZ1kyOXVaR2wwYVc5dWN5QnZaaUIxYzJVc0lHTmxjblJwWm1sallYUmxJSEJ2YkdsamVTQmhibVFnWTJWeWRHbG1hV05oZEdsdmJpQndjbUZqZEdsalpTQnpkR0YwWlcxbGJuUnpMakEyQmdnckJnRUZCUWNDQVJZcWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZZMlZ5ZEdsbWFXTmhkR1ZoZFhSb2IzSnBkSGt2TUE0R0ExVWREd0VCL3dRRUF3SUhnREFRQmdvcWhraUc5Mk5rQmdzQkJBSUZBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBRGFZYjB5NDk0MXNyQjI1Q2xtelQ2SXhETUlKZjRGelJqYjY5RDcwYS9DV1MyNHlGdzRCWjMrUGkxeTRGRkt3TjI3YTQvdncxTG56THJSZHJqbjhmNUhlNXNXZVZ0Qk5lcGhtR2R2aGFJSlhuWTR3UGMvem83Y1lmcnBuNFpVaGNvT0FvT3NBUU55MjVvQVE1SDNPNXlBWDk4dDUvR2lvcWJpc0IvS0FnWE5ucmZTZW1NL2oxbU9DK1JOdXhUR2Y4YmdwUHllSUdxTktYODZlT2ExR2lXb1IxWmRFV0JHTGp3Vi8xQ0tuUGFObVNBTW5CakxQNGpRQmt1bGhnd0h5dmozWEthYmxiS3RZZGFHNllRdlZNcHpjWm04dzdISG9aUS9PamJiOUlZQVlNTnBJcjdONFl0UkhhTFNQUWp2eWdhWndYRzU2QWV6bEhSVEJoTDhjVHFBPT0iOwoJInB1cmNoYXNlLWluZm8iID0gImV3b0pJbTl5YVdkcGJtRnNMWEIxY21Ob1lYTmxMV1JoZEdVdGNITjBJaUE5SUNJeU1ERTJMVEEzTFRNd0lEQXlPalV6T2pFMElFRnRaWEpwWTJFdlRHOXpYMEZ1WjJWc1pYTWlPd29KSW5WdWFYRjFaUzFwWkdWdWRHbG1hV1Z5SWlBOUlDSXdOakprWTJKaU1qUTVNV0V5TWpZNVptVm1NalUxWkdNMFpXUmpPVFl5T0dVMU16YzVObUU1SWpzS0NTSnZjbWxuYVc1aGJDMTBjbUZ1YzJGamRHbHZiaTFwWkNJZ1BTQWlNVEF3TURBd01ESXlOalk0TURFMU1DSTdDZ2tpWW5aeWN5SWdQU0FpTkM0eElqc0tDU0owY21GdWMyRmpkR2x2YmkxcFpDSWdQU0FpTVRBd01EQXdNREl5TmpZNE1ERTFNQ0k3Q2draWNYVmhiblJwZEhraUlEMGdJakVpT3dvSkltOXlhV2RwYm1Gc0xYQjFjbU5vWVhObExXUmhkR1V0YlhNaUlEMGdJakUwTmprNE56SXpPVFEzTVRZaU93b0pJblZ1YVhGMVpTMTJaVzVrYjNJdGFXUmxiblJwWm1sbGNpSWdQU0FpUVVGR1FUTXdNalV0T1VVM05TMDBOalk1TFVJNE1FVXRRMFZCT1VSRU56RkZOek5HSWpzS0NTSndjbTlrZFdOMExXbGtJaUE5SUNJeE1EQXdNREVpT3dvSkltbDBaVzB0YVdRaUlEMGdJakV4TXpreE16ZzNNeklpT3dvSkltSnBaQ0lnUFNBaVkyOXRMbVpoYm5kbExteHBkbVVpT3dvSkluQjFjbU5vWVhObExXUmhkR1V0YlhNaUlEMGdJakUwTmprNE56SXpPVFEzTVRZaU93b0pJbkIxY21Ob1lYTmxMV1JoZEdVaUlEMGdJakl3TVRZdE1EY3RNekFnTURrNk5UTTZNVFFnUlhSakwwZE5WQ0k3Q2draWNIVnlZMmhoYzJVdFpHRjBaUzF3YzNRaUlEMGdJakl3TVRZdE1EY3RNekFnTURJNk5UTTZNVFFnUVcxbGNtbGpZUzlNYjNOZlFXNW5aV3hsY3lJN0Nna2liM0pwWjJsdVlXd3RjSFZ5WTJoaGMyVXRaR0YwWlNJZ1BTQWlNakF4Tmkwd055MHpNQ0F3T1RvMU16b3hOQ0JGZEdNdlIwMVVJanNLZlE9PSI7CgkiZW52aXJvbm1lbnQiID0gIlNhbmRib3giOwoJInBvZCIgPSAiMTAwIjsKCSJzaWduaW5nLXN0YXR1cyIgPSAiMCI7Cn0=';
  269. $m_config = load_auto_cache("m_config");
  270. $sdk_version_name = strim($_REQUEST['sdk_version_name']);
  271. if ($m_config['ios_check_version'] != ''){
  272. //请求验证
  273. $data = $this->acurl($receipt_data,0);
  274. //如果是沙盒数据 则验证沙盒模式
  275. if($data['status']=='21007'){
  276. //请求验证
  277. //log_err_file(array(__FILE__,__LINE__,__METHOD__,$data));
  278. $data = $this->acurl($receipt_data, 1);
  279. }
  280. }else{
  281. //请求验证
  282. $data = $this->acurl($receipt_data, 0);
  283. }
  284. if ($data['status'] == 0)
  285. {
  286. $notice_sn = $data['receipt']['transaction_id'];
  287. $payment_notice = $GLOBALS['db']->getRow("select id from ".DB_PREFIX."payment_notice where notice_sn = '".$notice_sn."'");
  288. if($payment_notice)
  289. {
  290. $root['status'] = 1;
  291. $root['error'] = '支付成功';
  292. }else{
  293. $pay_id = $GLOBALS['db']->getOne("select id from ".DB_PREFIX."payment where class_name='Iappay'",true,true);
  294. $product_id = $data['receipt']['product_id'];
  295. $sql = "select id,money,name,iap_money,product_id,(iap_diamonds+gift_diamonds) as diamonds from ".DB_PREFIX."recharge_rule where product_id ='".$product_id."'";
  296. $rule = $GLOBALS['db']->getRow($sql,true,true);
  297. $payment_notice = array();
  298. $payment_notice['create_time'] = NOW_TIME;
  299. $payment_notice['user_id'] = $user_id;
  300. $payment_notice['payment_id'] = $pay_id;
  301. $payment_notice['money'] = $rule['iap_money'];
  302. $payment_notice['recharge_id'] = $rule['id'];
  303. $payment_notice['recharge_name'] = $rule['name'];
  304. $payment_notice['product_id'] = $rule['product_id'];
  305. $payment_notice['notice_sn'] = $notice_sn;
  306. $payment_notice['iap_receipt'] = print_r($data['receipt'],1);
  307. $payment_notice['diamonds'] = $rule['diamonds'];
  308. $GLOBALS['db']->autoExecute(DB_PREFIX."payment_notice",$payment_notice,"INSERT","","SILENT");
  309. $notice_id = $GLOBALS['db']->insert_id();
  310. //if ($notice_id > 0){
  311. require_once APP_ROOT_PATH."system/libs/cart.php";
  312. $root = payment_paid($payment_notice['notice_sn'],$data['receipt']['original_transaction_id']);
  313. //}
  314. }
  315. }else
  316. {
  317. log_err_file(array(__FILE__,__LINE__,__METHOD__,$data));
  318. $root['status'] = 0;
  319. $root['error'] = print_r($data,1);
  320. }
  321. }
  322. ajax_return($root);
  323. }
  324. /**
  325. * 21000 App Store不能读取你提供的JSON对象
  326. * 21002 receipt-data域的数据有问题
  327. * 21003 receipt无法通过验证
  328. * 21004 提供的shared secret不匹配你账号中的shared secret
  329. * 21005 receipt服务器当前不可用
  330. * 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送
  331. * 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务
  332. * 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务
  333. *
  334. Array
  335. (
  336. [receipt] => Array
  337. (
  338. [original_purchase_date_pst] => 2016-07-30 02:53:14 America/Los_Angeles
  339. [purchase_date_ms] => 1469872394716
  340. [unique_identifier] => 062dcbb2491a2269fef255dc4edc9628e53796a9
  341. [original_transaction_id] => 1000000226680150
  342. [bvrs] => 4.1
  343. [transaction_id] => 1000000226680150
  344. [quantity] => 1
  345. [unique_vendor_identifier] => AAFA3025-9E75-4669-B80E-CEA9DD71E73F
  346. [item_id] => 1139138732
  347. [product_id] => 100001
  348. [purchase_date] => 2016-07-30 09:53:14 Etc/GMT
  349. [original_purchase_date] => 2016-07-30 09:53:14 Etc/GMT
  350. [purchase_date_pst] => 2016-07-30 02:53:14 America/Los_Angeles
  351. [bid] => com.fanwe.live
  352. [original_purchase_date_ms] => 1469872394716
  353. )
  354. [status] => 0
  355. )
  356. );
  357. */
  358. private function acurl($receipt_data,$sandbox) {
  359. //正式购买地址 沙盒购买地址
  360. $url_buy = "https://buy.itunes.apple.com/verifyReceipt";
  361. $url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
  362. $url = $sandbox ? $url_sandbox : $url_buy;
  363. $ch = curl_init($url);
  364. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  365. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  366. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  367. curl_setopt($ch, CURLOPT_POST, true);
  368. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array("receipt-data" => $receipt_data)));//$this->encodeRequest());
  369. $response = curl_exec($ch);
  370. $errno = curl_errno($ch);
  371. $errmsg = curl_error($ch);
  372. curl_close($ch);
  373. if ($errno != 0) {
  374. //throw new Exception($errmsg, $errno);
  375. $data = array();
  376. $data['status'] = $errno;
  377. $data['error'] = $errmsg;
  378. return $data;
  379. }else{
  380. return json_decode($response,1);
  381. }
  382. }
  383. /**
  384. * 购物结算支付页面
  385. * 1、生成订单
  386. * 2、返回界面信息:1)订单金额,2)账号余额
  387. */
  388. public function h5_pay(){
  389. $root['page_title'] ='支付订单';
  390. $user_id = intval($GLOBALS['user_info']['id']);
  391. if ($user_id == 0) {
  392. $root['status'] = 10007;
  393. $root['error'] = "请先登录";
  394. api_ajax_return($root);
  395. }
  396. $order_sn = strim($_REQUEST['order_sn']);//订单编号
  397. $shop_info = $_REQUEST['shop_info'];//订单编号//卖家主播ID//商品ID//商品数量
  398. $data['shop_info']=json_decode($shop_info,true);
  399. $data['viewer_id'] = $user_id;//观众ID
  400. $data['purchase_type'] = intval($_REQUEST['purchase_type']); //0表示买给自己、1表示买给主播
  401. $data['address_id'] = intval($_REQUEST['address_id']);//收货地址ID
  402. if($order_sn == '' && $shop_info == ''){
  403. $root['status'] = 0;
  404. $root['data']['total_diamonds'] = 0;
  405. api_ajax_return($root);
  406. }
  407. if($order_sn != ''){
  408. $order_goods_info = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."goods_order WHERE order_sn=".$order_sn);
  409. $sql = "select id,name,class_name,logo from " . DB_PREFIX . "payment where class_name in ('Aliapp','WxApp') and is_effect = 1";
  410. $root['data']['payment_info'] = $GLOBALS['db']->getAll($sql);
  411. if($order_goods_info['order_status'] == 1){
  412. $root['status'] = 1;
  413. $root['data']['order_id']= $order_goods_info['id'];
  414. $root['data']['order_sn'] = $order_goods_info['order_sn'];
  415. if($order_goods_info['buy_type'] == 0){
  416. $root['data']['order_type'] = 'h5shop';
  417. }else{
  418. $root['data']['order_type'] = 'to_podcast';
  419. }
  420. $root['data']['total_diamonds'] = floatval($order_goods_info['total_diamonds']);
  421. }else{
  422. $root['status'] = 0;
  423. $root['data']['total_diamonds'] = 0;
  424. }
  425. api_ajax_return($root);
  426. }
  427. if($data['shop_info'] != ''){
  428. foreach($data['shop_info'] as $key => $value){
  429. $order_goods_info = $GLOBALS['db']->getRow("SELECT * FROM ".DB_PREFIX."goods_order WHERE order_status=1 and order_sn=".$value['order_sn']);
  430. $data['shop_info'][$key]['order_id'] = $order_goods_info['id'];
  431. $root['data']['total_diamonds'] += floatval($order_goods_info['total_diamonds']);
  432. }
  433. $sql = "select id,name,class_name,logo from " . DB_PREFIX . "payment where class_name in ('Aliapp','WxApp') and is_effect = 1";
  434. $root['data']['payment_info'] = $GLOBALS['db']->getAll($sql);
  435. if($order_goods_info){
  436. $root['status'] = 1;
  437. if($order_goods_info['buy_type'] == 0){
  438. $root['data']['order_type'] = 'h5shop';
  439. }else{
  440. $root['data']['order_type'] = 'to_podcast';
  441. }
  442. $root['data']['shop_info'] = $data['shop_info'];
  443. api_ajax_return($root);
  444. }
  445. }
  446. $ret = FanweServiceCall("pai_user","create_shop_order",$data);
  447. if($ret['status'] == 1){
  448. $root['data']['status']= $ret['status'];
  449. $root['data']['error']= $ret['error'];
  450. //$root['data']['order_id']= $ret['order_id'];
  451. $root['data']['total_diamonds'] = $ret['price'];
  452. if(intval($_REQUEST['purchase_type']) == 0){
  453. $root['data']['order_type'] = 'h5shop';
  454. }else{
  455. $root['data']['order_type'] = 'to_podcast';
  456. }
  457. $root['data']['purchase_type'] = intval($_REQUEST['purchase_type']);
  458. $root['data']['shop_info'] = $ret['shop_info'];
  459. $root['data']['payment_info'] = $ret['payment_info'];
  460. }elseif($ret['status'] == 10054){
  461. $root['data']['status']= $ret['status'];
  462. $root['data']['error']= $ret['error'];
  463. $root['data']['total_diamonds'] = floatval($ret['total_diamonds']);
  464. }elseif($ret['status'] == 10064){
  465. $root['data']['status']= $ret['status'];
  466. $root['data']['error']= $ret['error'];
  467. }else{
  468. $root['data']['status']= $ret['status'];
  469. $root['data']['error']= $ret['error'];
  470. }
  471. api_ajax_return($root);
  472. }
  473. /**
  474. * 购物SDK支付
  475. *
  476. */
  477. public function shop_h5_pay(){
  478. $payment_id = intval($_REQUEST['pay_id']);//2支付宝支付,6微信js支付,11苹果支付,12微信app支付
  479. $order_id = intval($_REQUEST['order_id']); //订单id
  480. $order_sn = strim($_REQUEST['order_sn']); //订单编号
  481. $shop_info = $_REQUEST['shop_info']; //订单编号、订单ID
  482. $shop_info = json_decode($shop_info,true);
  483. $user_id=intval($GLOBALS['user_info']['id']);
  484. if(!$user_id)
  485. {
  486. $data['status'] = 0;
  487. $data['error'] = '未登录';
  488. ajax_return($data);
  489. }
  490. if($payment_id==0){
  491. $data['status'] = 0;
  492. $data['error'] = '请选择支付方式';
  493. ajax_return($data);
  494. }
  495. $money = 0;
  496. if(count($shop_info) > 1){
  497. foreach($shop_info as $key => $value){
  498. $table = '`' . DB_PREFIX . 'goods_order`';
  499. $field = '`pai_id`,`goods_id`,`number`,`order_status`,`total_diamonds`,`order_sn`,`viewer_id`,`podcast_id`,`pid`';
  500. $sql = "SELECT $field FROM $table WHERE id=".$value['order_id']." and order_sn=".$value['order_sn'];
  501. $order = $GLOBALS['db']->getRow($sql);
  502. // 1:待付款 2:待发货 3:待收货(主播确认约会) 4:已收货(观众确认约会) 5:退款成功 6未付款 7结单
  503. if ($order['order_status'] != 1) {
  504. api_ajax_return(array(
  505. 'status' => 0,
  506. 'error' => '订单信息错误',
  507. ));
  508. }
  509. $goods_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX ."goods where is_effect=1 and id='".$order['goods_id']."'");
  510. //判断商品是否下架
  511. if($goods_info){
  512. $money = floatval($order['total_diamonds']);
  513. $recharge_name = $goods_info['name'];
  514. }else{
  515. $goods_name = $GLOBALS['db']->getOne("SELECT name FROM ".DB_PREFIX."goods WHERE id=".$order['goods_id']);
  516. ajax_return(array(
  517. 'status' => 0,
  518. 'error' => "$goods_name"."--商品已下架",
  519. ));
  520. }
  521. $order_id = $order['pid'];
  522. }
  523. $recharge_name = json_encode($recharge_name,JSON_UNESCAPED_UNICODE);
  524. }elseif(count($shop_info) == 1){
  525. foreach($shop_info as $key => $value){
  526. $table = '`' . DB_PREFIX . 'goods_order`';
  527. $field = '`pai_id`,`goods_id`,`number`,`order_status`,`total_diamonds`,`order_sn`,`viewer_id`,`podcast_id`';
  528. $sql = "SELECT $field FROM $table WHERE id=".$value['order_id']." and order_sn=".$value['order_sn'];
  529. $order = $GLOBALS['db']->getRow($sql);
  530. // 1:待付款 2:待发货 3:待收货(主播确认约会) 4:已收货(观众确认约会) 5:退款成功 6未付款 7结单
  531. if ($order['order_status'] != 1) {
  532. api_ajax_return(array(
  533. 'status' => 0,
  534. 'error' => '订单信息错误',
  535. ));
  536. }
  537. $goods_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX ."goods where is_effect=1 and id='".$order['goods_id']."'");
  538. //判断商品是否下架
  539. if($goods_info){
  540. $money = floatval($order['total_diamonds']);
  541. $recharge_name = $goods_info['name'];
  542. }else{
  543. $goods_name = $GLOBALS['db']->getOne("SELECT name FROM ".DB_PREFIX."goods WHERE id=".$order['goods_id']);
  544. ajax_return(array(
  545. 'status' => 0,
  546. 'error' => "$goods_name"."--商品已下架",
  547. ));
  548. }
  549. $order_id = $value['order_id'];
  550. }
  551. }else{
  552. $table = '`' . DB_PREFIX . 'goods_order`';
  553. $field = '`pai_id`,`goods_id`,`number`,`order_status`,`total_diamonds`,`order_sn`,`viewer_id`,`podcast_id`';
  554. $sql = "SELECT $field FROM $table WHERE id=".$order_id." and order_sn=".$order_sn;
  555. $order = $GLOBALS['db']->getRow($sql);
  556. // 1:待付款 2:待发货 3:待收货(主播确认约会) 4:已收货(观众确认约会) 5:退款成功 6未付款 7结单
  557. if ($order['order_status'] != 1) {
  558. api_ajax_return(array(
  559. 'status' => 0,
  560. 'error' => '订单信息错误',
  561. ));
  562. }
  563. $goods_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX ."goods where is_effect=1 and id='".$order['goods_id']."'");
  564. //判断商品是否下架
  565. if($goods_info){
  566. $money = floatval($order['total_diamonds']);
  567. $recharge_name = $goods_info['name'];
  568. }else{
  569. $goods_name = $GLOBALS['db']->getOne("SELECT name FROM ".DB_PREFIX."goods WHERE id=".$order['goods_id']);
  570. ajax_return(array(
  571. 'status' => 0,
  572. 'error' => "$goods_name"."--商品已下架",
  573. ));
  574. }
  575. }
  576. $sql = "select id,name,class_name,logo from " . DB_PREFIX . "payment where is_effect = 1 and id =" . $payment_id;
  577. $payment_info = $GLOBALS['db']->getRow($sql, true, true);
  578. if (!$payment_info || $money == 0) {
  579. ajax_return(array(
  580. 'error' => '支付id或 项目id无效',
  581. 'status' => 0,
  582. 'rule' => '',
  583. 'pay' => $payment_info,
  584. 'money' => $money,
  585. ));
  586. }
  587. $payment_notice['create_time'] = NOW_TIME;
  588. $payment_notice['user_id'] = $user_id;
  589. $payment_notice['order_id'] = $order_id;
  590. $payment_notice['payment_id'] = $payment_id;
  591. $payment_notice['money'] = $money;
  592. $payment_notice['diamonds'] = 0; //充值时,获得的钻石数量
  593. $payment_notice['bank_id'] = 0;//strim($_REQUEST['bank_id']);
  594. $payment_notice['recharge_id'] = 0;
  595. $payment_notice['recharge_name'] = "购买".$recharge_name."商品支付人民币:".$money;
  596. do{
  597. $payment_notice['notice_sn'] = to_date(NOW_TIME,"Ymdhi").rand(10000,99999);
  598. $GLOBALS['db']->autoExecute(DB_PREFIX."payment_notice",$payment_notice,"INSERT","","SILENT");
  599. $notice_id = $GLOBALS['db']->insert_id();
  600. }while($notice_id==0);
  601. $class_name = $payment_info['class_name']."_payment";
  602. require_once APP_ROOT_PATH."system/payment/".$class_name.".php";
  603. $o = new $class_name;
  604. $pay= $o->get_payment_code($notice_id);
  605. if($pay){
  606. $data['status'] = 1;
  607. }
  608. $data['pay'] = $pay;
  609. ajax_return($data);
  610. }
  611. /**
  612. * 模块化处理
  613. */
  614. public function get_display_code(){
  615. $pay_code = strim($_REQUEST['pay_code']);
  616. $notice_id = intval($_REQUEST['notice_id']);
  617. $class_name = $pay_code."_payment";
  618. require_once APP_ROOT_PATH."system/payment/".$class_name.".php";
  619. $o = new $class_name;
  620. $pay= $o->display_code($notice_id);
  621. echo $pay;
  622. }
  623. //获取字符串类型的钱数值,如果有小数位≠0则省略小数位,否则保留
  624. public function get_money_name($money){
  625. if(ceil($money)>intval($money)){
  626. $money_name = (string)$money;
  627. }else{
  628. $money_name = (string)intval($money);
  629. }
  630. return $money_name;
  631. }
  632. }