params['isDev']==true){ $url=Yii::$app->request->hostInfo.'/addons/yb_wm/index.php/channelApi/pay-notice/ali-notice'; }else{ $url=Yii::$app->request->hostInfo.'/index.php/channelApi/pay-notice/ali-notice'; } $biz_content = array( 'out_order_no' => $outTradeNo, 'uid' => $openId, 'merchant_id' => $merchantId, 'total_amount' => $money * 100, 'currency' => 'CNY', 'subject' => $note, 'body' => $note, 'trade_time' => time(), 'valid_time' => '60', 'notify_url' => $url, 'risk_info' => '127.0.0.1', ); $biz_content = json_encode($biz_content); $data['app_id'] = $appId; $data['biz_content'] = $biz_content; $data['charset'] = 'utf-8'; $data['method'] = 'tp.trade.create'; $data['sign_type'] = 'MD5'; $data['timestamp'] = time(); $data['version'] = '1.0'; ksort($data); $var = ''; foreach ($data as $key => $value) { $var .= $key . '=' . $value . '&'; } $var = trim($var, '&'); $c = $var . $secret; $data['sign'] = MD5($c); ksort($data); $vars = 'app_id=' . $data['app_id'] . '&biz_content=' . $data['biz_content'] . '&charset=' . $data['charset'] . '&method=' . $data['method'] . '&sign=' . $data['sign'] . '&sign_type=' . $data['sign_type'] . '×tamp=' . $data['timestamp'] . '&version=' . $data['version']; $url = 'https://tp-pay.snssdk.com/gateway'; $res = httpRequest($url, $vars); // print_R($res);die; $data['biz_content'] = json_decode($data['biz_content'], true); $data['trade_no'] = json_decode($res, true)['response']['trade_no']; $data['aliUrl'] = Ali::zjPay($uniacid,$outTradeNo, $money,$note,$orderType)['data']; $list['app_id'] = $appId; // test $list['method'] = 'tp.trade.confirm'; $list['sign_type'] = 'MD5'; $list["uid"] = $openId; $list["total_amount"] = $money * 100; $list['timestamp'] = $data['timestamp']; $list['pay_channel'] = "ALIPAY_NO_SIGN"; $list["pay_type"] = "ALIPAY_APP"; $list["trade_no"] = $data['trade_no']; $list["merchant_id"] = $merchantId; $list["risk_info"] = "127.0.0.1"; $arrParam = array("url" => $data['aliUrl']); $strParam = json_encode($arrParam); $list["params"] = $strParam; $list['url'] = $data['aliUrl']; $signKeys = array("app_id", "sign_type", "timestamp", "trade_no", "merchant_id", "uid", "total_amount", "params"); $signData = array(); foreach ($signKeys as $v) { $signData[$v] = $list[$v]; } ksort($signData); $var = ''; foreach ($signData as $key => $value) { $var .= $key . '=' . $value . '&'; } $var = trim($var, '&'); $data['sign'] = MD5($var . $secret); //$data['sign'] = json_decode($res, true)['sign']; return $data; } public static function sign($map,$salt) { $rList = array(); foreach($map as $k =>$v) { if ($k == "other_settle_params" || $k == "app_id" || $k == "sign" || $k == "thirdparty_id") continue; $value = trim(strval($v)); $len = strlen($value); if ($len > 1 && substr($value, 0,1)=="\"" && substr($value,$len, $len-1)=="\"") $value = substr($value,1, $len-1); $value = trim($value); if ($value == "" || $value == "null") continue; array_push($rList, $value); } array_push($rList, $salt); sort($rList, 2); return md5(implode('&', $rList)); } public static function noticeSign($map,$token) { $rList = array(); foreach($map as $k =>$v) { if ($k == "msg_signature" || $k == "type") continue; $value = trim(strval($v)); $len = strlen($value); if ($len > 1 && substr($value, 0,1)=="\"" && substr($value,$len, $len-1)=="\"") $value = substr($value,1, $len-1); $value = trim($value); if ($value == "" || $value == "null") continue; array_push($rList, $value); } array_push($rList, $token); sort($rList, 2); return sha1(implode('', $rList)); } //新版支付 public static function pay2($uniacid,$outTradeNo,$money,$note,$openId,$orderType,$url){ //https://developer.toutiao.com/api/apps/ecpay/v1/create_order $set = Config::getSystemSet('toutiao', $uniacid); $appId = $set['appKey']; $data['app_id']=$appId; $data['out_order_no']=$outTradeNo; $data['total_amount']=intval($money * 100); $data['subject']=$note; $data['body']=$note; $data['valid_time']=15*60; $data['notify_url']=$url; $data['cp_extra']=json_encode(['orderType'=>$orderType,'uniacid'=>$uniacid]); $data['sign']=self::sign($data,$set['salt']); // var_dump($data);die; $res=httpRequest('https://developer.toutiao.com/api/apps/ecpay/v1/create_order',json_encode($data)); // file_put_contents('toutiaopay.log',json_encode(json_decode($res,true)['data'])); return json_decode($res,true)['data']; } public static function refund($uniacid,$outTradeNo,$money,$refundNo){ // if(Yii::$app->params['isDev']==true){ // $url=Yii::$app->request->hostInfo.'/addons/yb_wm/index.php/channelApi/pay-notice/tou-tiao-refund-notice'; // }else{ // $url=Yii::$app->request->hostInfo.'/index.php/channelApi/pay-notice/tou-tiao-refund-notice'; // } $set = Config::getSystemSet('toutiao', $uniacid); $appId = $set['appKey']; $data['app_id']=$appId; $data['out_order_no']=strval($outTradeNo); $data['out_refund_no']=strval($refundNo); $data['refund_amount']=intval($money * 100); $data['reason']='退款'; // $data['cp_extra']=json_encode(['orderType'=>$orderType,'uniacid'=>$uniacid]); // $data['notify_url']=$url; $data['sign']=self::sign($data,$set['salt']); $res=httpRequest('https://developer.toutiao.com/api/apps/ecpay/v1/create_refund',json_encode($data)); $res=json_decode($res,true); if($res['err_no']==0){ return true; } echo json_encode(['code'=>2,'msg'=>$res['err_tips']]);die; } //今日头条获取token public static function getTouToken($uniacid){ $cache = Yii::$app->cache; $cacheData = $cache->get('zijie_token'); if ($cacheData === false) { $set = Config::getSystemSet('toutiao', $uniacid); $appId = $set['appKey']; $secret = $set['appSecret']; $url='https://developer.toutiao.com/api/apps/token?appid='.$appId.'&secret='.$secret.'&grant_type=client_credential'; $res=httpRequest($url); $cacheData =json_decode($res,true)['access_token']; //set方法的第一个参数是我们的数据对应的key值,方便我们获取到 //第二个参数即是我们要缓存的数据 //第三个参数是缓存时间,如果是0,意味着永久缓存。默认是0 $cache->set('zijie_token', $cacheData, 7000); } return $cacheData; } //今日头条创建二维码 public static function createCode($uniacid,$module,$path,$ident,$appName='toutiao'){ //二维码宽度,单位 px,最小 280px,最大 1280px,默认为 430px $data['access_token']=self::getTouToken($uniacid); $data['appname']=$appName; $data['path']=$path; $data['width']=430; $postData=json_encode($data,JSON_UNESCAPED_UNICODE); $header[]='content-type: application/json'; $res=httpRequest('https://developer.toutiao.com/api/apps/qrcode',$postData,$header); $dir="web/static/".$module."/".$uniacid."/ziJieCode"; if(!file_exists($dir)){ mkdir($dir,0777,true); } $file=$ident.$uniacid.'.jpg'; file_put_contents($dir.'/'.$file,$res); //微擎版本 if(Yii::$app->params['isDev']==true){ $host=Yii::$app->request->hostInfo.'/addons/'.$module.'/'; }else{ $host=Yii::$app->request->hostInfo.'/'; } return $host.$dir."/".$file; } }