<?php include "../inc/odbc.php"; ?>
|
<?php
|
//大象慧云-开发平台
|
//https://sandbox.ele-cloud.com/
|
$method = !empty($_REQUEST["method"])?$_REQUEST["method"]:"";
|
|
$appKey = 'Mlfs7n9kofqPMaNVJSFoDcwS';
|
$appSecret = 'awSW7gts8AS4StGV84HCKVCf';
|
$NSRSBH = "1403016L1NN5336"; //纳税人识别号 (测试)
|
$NSRMC = "测试36"; //纳税人名称 (测试)
|
$EleCloudURL="https://api.966120.com.cn/EleCloud/";
|
|
function postAccessToken() {
|
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
|
global $appKey;
|
global $appSecret;
|
global $conn;
|
$sql = "select vtext,vMono=CONVERT(nvarchar(20),vMono,120) from dictionary where vtitle='EleCloud_access_token'";
|
$data = sqlsrv_query($conn,$sql);
|
if($data == true){
|
while($rs = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) {
|
$access_token = $rs['vtext'];
|
$expire_time = $rs['vMono'];
|
}
|
}
|
|
if (strtotime($expire_time) < time()) {
|
$url = "https://sandbox.ele-cloud.com/api/authen/token";
|
$send = array(
|
"appKey"=>$appKey,
|
"appSecret"=>$appSecret
|
);
|
// var_dump($send);exit;
|
$send = json_encode($send);
|
|
//echo $send;exit;
|
$headerArray =array("Content-Type: application/json");
|
$curl = curl_init();
|
curl_setopt($curl, CURLOPT_URL, $url);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
|
curl_setopt($curl, CURLOPT_POST, 1);
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $send);
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
$data_json = curl_exec($curl);
|
curl_close($curl);
|
//var_dump($data_json);exit;
|
|
$res = json_decode($data_json);
|
$access_token = $res->access_token;
|
$expire_time = date('Y-m-d H:i:s',time() + $res->expires_in);
|
$update_sql="update dictionary set vtext='".$access_token."',vMono='".$expire_time."' where vtitle='EleCloud_access_token'";
|
$res = sqlsrv_query($conn,$update_sql);
|
}
|
return $access_token;
|
}
|
|
$access_token=postAccessToken();
|
//echo $access_token;exit;
|
|
switch ($method)
|
{
|
case "AllocateInvoices": //发票开具冲红
|
$InvoiceID = !empty($_REQUEST["InvoiceID"]) ? $_REQUEST["InvoiceID"] : ""; //发票申请ID
|
$InvoiceType = !empty($_REQUEST["InvoiceType"]) ? $_REQUEST["InvoiceType"] : "2"; //发票类型
|
$EleCloudArray = array(
|
"DDPCXX"=>array(
|
"DDQQPCH"=>date('YmdHis')."_".rand(10000000,99999999), //订单请求批次号
|
"NSRSBH"=>$NSRSBH, //纳税人识别号(测试)
|
//"KPZD" => "", // "开票终端",
|
"FPLXDM"=>"026",
|
//"CPYBS" => "", // "成品油标识",
|
//"CPYBS" => "", // "扩展字段",
|
"KPFS"=>"0"
|
),
|
"DDZXX"=>array()
|
);
|
//echo json_encode($EleCloudArray);exit;
|
|
//$InvoiceID = "225";
|
$ServiceOrdID="";
|
$sql = "select InvoiceID,InvoiceType,InvoiceName,InvoiceMakeout,InvoiceCompanyPhone,InvoiceCompanyID,InvoiceCompanyAdd,InvoiceCompanyBank,InvoiceCompanyBankNo,InvoiceZipCode,Invoice_strAdd,Invoice_strName,Invoice_strPhone,Invoice_strEmail,ApplicationTime=CONVERT(nvarchar(20),ApplicationTime,111),AuditTime=CONVERT(nvarchar(20),AuditTime,111),AuditStatus,AuditOAID,AuditMakeout,InvoiceMoney,InvoiceNo,InvoiceURL,ServiceOrdID,ServiceOrdType,ServiceOrdNo=ServiceOrdClass+convert(nvarchar(10),year(ServiceOrd_CC_Time))+right('0'+convert(nvarchar(10),month(ServiceOrd_CC_Time)),2)+right('0'+convert(nvarchar(10),day(ServiceOrd_CC_Time)),2)+'-'+right('00'+convert(nvarchar(10),ServiceOrdNo),3),OrdTraPrice=ServiceOrdTraTxnPrice from InvoiceData,ServiceOrder where ServiceOrderIDPK=ServiceOrdID and AuditStatus<>4 and InvoiceType=".$InvoiceType." and InvoiceID in (".$InvoiceID.") and EleCloud_ZTDM<>'010000'";
|
$data = sqlsrv_query($conn,$sql);
|
if($data == true){
|
while($rs = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) {
|
$InvoiceID = $rs['InvoiceID']; //发票ID
|
$ServiceOrdID = $rs['ServiceOrdID']; //服务单ID
|
$ServiceOrdNo = $rs['ServiceOrdNo']; //服务单号
|
|
$InvoiceID = $rs['InvoiceID']; //开票信息ID
|
$InvoiceType = $rs['InvoiceType']; //开票类型
|
$InvoiceName = $rs['InvoiceName']; //发票抬头
|
$InvoiceMakeout = $rs['InvoiceMakeout']; //发票备注
|
$InvoiceCompanyPhone= $rs['InvoiceCompanyPhone'];//企业电话
|
$InvoiceCompanyID = str_replace(array("\r\n", "\r", "\n"),'',$rs['InvoiceCompanyID']); //纳税识别号
|
$InvoiceCompanyAdd = $rs['InvoiceCompanyAdd']; //企业注册地址
|
$InvoiceCompanyBank = $rs['InvoiceCompanyBank'];//企业开户银行
|
$InvoiceCompanyBankNo=$rs['InvoiceCompanyBankNo'];//企业银行账号
|
$InvoiceZipCode = $rs['InvoiceZipCode']; //邮编
|
$Invoice_strAdd = $rs['Invoice_strAdd']; //邮寄地址
|
$Invoice_strName = $rs['Invoice_strName']; //联系人
|
$Invoice_strPhone = $rs['Invoice_strPhone']; //联系电话
|
$Invoice_strEmail = $rs['Invoice_strEmail']; //电子邮箱
|
$ApplicationTime = $rs['ApplicationTime']; //申请时间
|
$AuditTime = $rs['AuditTime']; //处理时间
|
$AuditStatus = $rs['AuditStatus']; //处理状态
|
$AuditOAID = $rs['AuditOAID']; //处理人
|
$AuditMakeout = $rs['AuditMakeout']; //处理备注
|
$InvoiceMoney = $rs['InvoiceMoney']; //发票金额
|
$InvoiceNo = $rs['InvoiceNo']; //发票编号
|
$InvoiceURL = $rs['InvoiceURL']; //发票链接
|
if ($InvoiceMoney==0) {$InvoiceMoney=$rs['OrdTraPrice'];}
|
if (empty($Invoice_strEmail)) {$Invoice_strEmail="vicgame@163.com";} //测试邮箱
|
if (!empty($InvoiceCompanyID)) {$GMFLX="01";}else{$GMFLX="03";} //购买方类型(01 企业,02 机关事业单位,03 个人,04 其他)
|
|
array_push($EleCloudArray["DDZXX"],array(
|
"DDTXX"=>array(
|
"DDQQLSH"=>$InvoiceID, //"订单请求流水号"
|
"NSRSBH"=> $NSRSBH, //"纳税人识别号", 销货方纳税人识别号
|
"NSRMC" => $NSRMC, //"纳税人名称", 销货方纳税人名称
|
"KPLX" => "0", //"开票类型", 0 蓝字发票 1 红字发票
|
//"BMBBBH"=> "", //"编码表版本号",
|
"XHFSBH"=> $NSRSBH, //"销货方纳税人识别号", 企业纳税人识别号,如果未在销项系统 中维护企业信息节点 8,节点 9,节点 10, 节点 11 需要必填
|
"XHFMC" => $NSRMC, //"销货方名称", 销货方对应的名称,如果未在销项系统 中维护企业信息节点 8,节点 9,节点 10, 节点 11 需要必填
|
"XHFDZ" => "北京市海淀区", //"销货方地址", 销货方对应的地址
|
"XHFDH" => "1234567890", //"销货方电话", 销货方对应的电话
|
"XHFYH" => "交通银行海淀支行", //"销货方银行名称",
|
"XHFZH" => "140301615336", //"销货方银行账号",
|
"GMFLX" => $GMFLX, //"购买方类型", 01 企业,02 机关事业单位,03 个人, 04 其他 当开票方式为自动开票时必填
|
//"GMFBM" => "", //"购买方编码", 专票时必填
|
"GMFSBH"=> $InvoiceCompanyID, //"购买方纳税人识别号", 专票时必填
|
"GMFMC" => $InvoiceName, //"购买方名称", 专票时必填
|
"GMFDZ" => $InvoiceCompanyAdd, //"购买方地址", 专票时必填
|
"GMFDH" => $InvoiceCompanyPhone,//"购买方电话", 专票时必填
|
"GMFYH" => $InvoiceCompanyBank, //"购买方银行名称", 专票时必填
|
"GMFZH" => $InvoiceCompanyBankNo,//"购买方银行账号", 专票时必填
|
//"GMFSF" => "", //"购买方省份",
|
//"GMFSJH"=> "", //"购买方手机",
|
"GMFDZYX"=>$Invoice_strEmail, //"购买方邮箱", 如果填写,发票类别为电子发票时会自 动发送邮件
|
"KPR" => "萧洁纯", //"开票人", 企业传递开票人信息,发票上会进行展 示 当开票方式为自动开票时必填
|
"SKR" => "萧洁纯", //"收款人",
|
"FHR" => "张利华", //"复核人",
|
//"YFPDM" => "", //"原发票代码",
|
//"YFPHM" => "", //"原发票号码",
|
"QDBZ" => "0", //"清单标志", 普通发票, 1-普通发票(清单), 2-收购发票, 3-收购发票(清单), 4-成品油发票 0 或 2 时系统根据项目名称字数,自动产 生清单 1 或 3 时,系统取清单对应票面内容字段 打印到发票票面上,将项目信息 XMXX 打 印到清单上。 默认为 0
|
//"QDXMMC"=> "", //"清单项目名称", 需要打印清单时对应发票票面项目名称 清单标识(QDBZ)为 1 或 3 时必填
|
"JSHJ" => number_format($InvoiceMoney,2,".",""), //"价税合计", 小数点后 2 位,以元为单位精确到分; 不能为 0
|
"HJJE" => "0", //"合计金额", 小数点后 2 位,以元为单位精确到分。 可填写 0,由发票系统做价税分离,重 新赋值。
|
"HJSE" => "0", //"合计税额", 小数点后 2 位,以元为单位精确到分。 可填写 0,由发票系统做价税分离,重 新赋值。
|
//"BZ " => "", //"备注",
|
//"CHYY" => "", //"冲红原因",
|
//"TSCHBZ" => "", //"特殊冲红标志",
|
"DDH" => $ServiceOrdID //"订单号",
|
//"THDH" => "", //"退货单号",
|
//"DDSJ" => "", //"订单时间",
|
//"YWLX" => "", //"业务类型",
|
//"BYZD1" => "", //"备用字段1",
|
//"BYZD2" => "", //"备用字段2",
|
//"BYZD3" => "", //"备用字段3",
|
//"BYZD4" => "", //"备用字段4",
|
//"BYZD5" => "", //"备用字段5"
|
)
|
,
|
"DDMXXX"=>array(array(
|
//"XH" => "", //"项目序号",
|
"FPHXZ" => "0", //"发票行性质", 0 正常行,1 折扣行,2 被折扣行,6 清 单红字发票
|
"SPBM" => "3040301020000000000", //"商品税收分类编码", 税收分类编码。发票票面上“货物或应 税劳务、服务名称中**之间的内容,通 过税收分类编码取对应的简称
|
//"ZXBM" => "", //"自行编码",
|
"YHZCBS"=> "1", //"优惠政策标识", 0:不使用,1:使用
|
"LSLBS" => "1", //"零税率标识", 空:非零税率,0:出口零税,1:免税,2: 不征税 3:普通零税率 若填写了 3(普通零税率), 则: YHZCBS 填 0,ZZSTSGL 填空
|
"ZZSTSGL"=>"免税", //"增值税特殊管理",
|
"XMMC" => "医疗服务", //"项目名称", 折扣行项目名称与上一行被折扣行项目 名称一致
|
//"GGXH" => "", //"规格型号",
|
"DW" => "次", //"单位",
|
"SPSL" => "1", //"商品数量", 小数点后 8 位, 小数点后都是 0 时,只 显示整数;不能为 0,对于折扣行或运 费等没有“数量概念的数据项,商品数 量默认为 1
|
"DJ" => number_format($InvoiceMoney,2,".",""), //"单价", 小数点后 8 位小数点后都是 0 时,只显 示 2 位小数;否则只显示至最后一位不 为 0 的数字;不能为 0, 清单红字可以为空
|
"JE" => number_format($InvoiceMoney,2,".",""), //"金额", 小数点后 2 位,以元为单位精确到分。 等于=单价*数量,根据含税标志,确定 此金额是否为含税金额;不能为 0
|
"HSBZ" => "1", //"含税标志", 表示单价和金额是否含税。0 表示都不 含税,1 表示都含
|
"SL" => "0", //"税率", 如果税率为 0,表示免税,小数点后 3 位, 清单红字若对应的蓝字发票为多种税 率,税率填充为空,单一税率填写此税 率
|
"SE" => "0" //"税额", 小数点后 2 位,以元为单位精确到分, 含税标志为 0,税额必填,清单红字税 额必填
|
//"KCE" => "", //"扣除额",
|
//"BYZD1" => "", //"备用字段1",
|
//"BYZD2" => "", //"备用字段2",
|
//"BYZD3" => "", //"备用字段3"
|
))
|
)
|
);
|
//echo json_encode($EleCloudArray);exit;
|
|
}
|
}
|
|
if (!empty($ServiceOrdID)) {
|
$url = "https://sandbox.ele-cloud.com/api/order-api/order-api/v4/AllocateInvoices?access_token=".$access_token;
|
//echo json_encode($EleCloudArray);exit;
|
$send = array(
|
"zipCode"=>"0",
|
"encryptCode"=>"0",
|
"dataExchangeId"=>date('YmdHis').rand(1000000000,9999999999)."00000000",
|
"encryptentCodeCode"=>"1234",
|
"content"=>base64_encode(json_encode($EleCloudArray))
|
);
|
$send = json_encode($send);
|
|
//echo $send."<br><br>";//exit;
|
$headerArray =array("Content-Type: application/json");
|
$curl = curl_init();
|
curl_setopt($curl, CURLOPT_URL, $url);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
|
curl_setopt($curl, CURLOPT_POST, 1);
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $send);
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
$data_json = curl_exec($curl);
|
curl_close($curl);
|
//echo $data_json."<br>";//exit;
|
|
$res = json_decode($data_json);
|
$res_content = $res->content;
|
if (!empty($res_content)){
|
$res_content=json_decode(base64_decode($res_content));
|
$ZTDM = $res_content->ZTDM;
|
$ZTXX = $res_content->ZTXX;
|
$update_sql="update InvoiceData set EleCloud_ZTDM='".$ZTDM."',EleCloud_ZTXX='".$ZTXX."',EleCloud_Time=getdate() where InvoiceID=".$InvoiceID;
|
$res = sqlsrv_query($conn,$update_sql);
|
$api_json = array(
|
"ZTDM"=>$ZTDM,
|
"ZTXX"=>$ZTXX
|
);
|
echo json_encode($api_json);exit;
|
}else{
|
$returnStateInfo = $res->returnStateInfo;
|
echo base64_decode($returnStateInfo->returnMessage);exit;
|
}
|
|
//$update_sql="update dictionary set vtext='".$access_token."',vMono='".$expire_time."' where vtitle='EleCloud_access_token'";
|
//$res = sqlsrv_query($conn,$update_sql);
|
|
}
|
|
break;
|
|
case "GetOrderInfoAndInvoiceInfo": //订单和发票数据查询接口
|
$InvoiceID = !empty($_REQUEST["InvoiceID"]) ? $_REQUEST["InvoiceID"] : ""; //发票申请ID
|
$EleCloud_ZTDM="";
|
$EleCloud_ZTXX="";
|
$EleCloud_Time="";
|
$sql = "select InvoiceID,EleCloud_ZTDM,EleCloud_ZTXX,EleCloud_Time=CONVERT(nvarchar(20),EleCloud_Time,111),ServiceOrderIDPK from InvoiceData where EleCloud_ZTDM<>'' and InvoiceID in (".$InvoiceID.")";
|
$data = sqlsrv_query($conn,$sql);
|
if($data == true){
|
while($rs = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) {
|
$EleCloud_ZTDM = $rs['EleCloud_ZTDM']; //申请结果代码
|
$EleCloud_ZTXX = $rs['EleCloud_ZTXX']; //申请结果说明
|
$EleCloud_Time = $rs['EleCloud_Time']; //申请返回时间
|
$ServiceOrderID = $rs['ServiceOrderIDPK']; //服务单ID
|
}
|
}
|
if ($EleCloud_ZTDM=="010000") {
|
$EleCloudArray=array(
|
"NSRSBH"=> $NSRSBH, //"纳税人识别号", 销货方纳税人识别号
|
"DDQQLSH"=>$InvoiceID //"订单请求流水号"
|
);
|
$url = "https://sandbox.ele-cloud.com/api/order-api/order-api/v4/GetOrderInfoAndInvoiceInfo?access_token=".$access_token;
|
//echo json_encode($EleCloudArray);exit;
|
$send = array(
|
"zipCode"=>"0",
|
"encryptCode"=>"0",
|
"dataExchangeId"=>date('YmdHis').rand(1000000000,9999999999)."00000000",
|
"encryptentCodeCode"=>"1234",
|
"content"=>base64_encode(json_encode($EleCloudArray))
|
);
|
$send = json_encode($send);
|
|
//echo $send."<br><br>";//exit;
|
$headerArray =array("Content-Type: application/json");
|
$curl = curl_init();
|
curl_setopt($curl, CURLOPT_URL, $url);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
|
curl_setopt($curl, CURLOPT_POST, 1);
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $send);
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
$data_json = curl_exec($curl);
|
curl_close($curl);
|
//echo $data_json."<br>";exit;
|
|
$res = json_decode($data_json);
|
$res_content = $res->content;
|
if (!empty($res_content)){
|
$res_content=json_decode(base64_decode($res_content));
|
$ZTDM = $res_content->ZTDM;
|
$ZTXX = $res_content->ZTXX;
|
$PDFURL="";
|
if ($ZTDM=="000000") {
|
$res_content=$res_content->DDFPZXX[0]->DDFPXX;
|
$FPDM=$res_content->FPDM; //发票代码
|
$FPHM=$res_content->FPHM; //发票号码
|
$KPRQ=$res_content->KPRQ; //开票日期
|
$PDFZJL=$res_content->PDFZJL; //PDF字节流
|
//echo FPDM."<br>";exit;
|
|
//PDF文件生成
|
$stream_data=$PDFZJL;
|
$receive_file_name="PDF/".$ServiceOrderID."_".$FPHM.".pdf";
|
$PDFURL=$EleCloudURL.$receive_file_name;
|
$result = false;
|
if ($stream_data != '') {
|
$result = file_put_contents($receive_file_name, base64_decode($stream_data), true); // 保存文件
|
}
|
//echo $receive_file_name;exit;
|
$update_sql="update InvoiceData set InvoiceNo='".$FPHM."',InvoiceURL='".$PDFURL."',EleCloud_ZTDM='".$ZTDM."',EleCloud_ZTXX='".$ZTXX."',EleCloud_Time='".$KPRQ."' where InvoiceID=".$InvoiceID;
|
$res = sqlsrv_query($conn,$update_sql);
|
}else{
|
$update_sql="update InvoiceData set EleCloud_ZTDM='".$ZTDM."',EleCloud_ZTXX='".$ZTXX."',EleCloud_Time=getdate() where InvoiceID=".$InvoiceID;
|
$res = sqlsrv_query($conn,$update_sql);
|
}
|
|
$api_json = array(
|
"InvoiceID"=>$InvoiceID,
|
"ZTDM"=>$ZTDM,
|
"ZTXX"=>$ZTXX,
|
"PDFURL"=>$PDFURL
|
);
|
echo json_encode($api_json);exit;
|
}else{
|
$returnStateInfo = $res->returnStateInfo;
|
echo base64_decode($returnStateInfo->returnMessage);exit;
|
}
|
|
//$update_sql="update dictionary set vtext='".$access_token."',vMono='".$expire_time."' where vtitle='EleCloud_access_token'";
|
//$res = sqlsrv_query($conn,$update_sql);
|
|
}else{
|
$api_json = array(
|
"InvoiceID"=>$InvoiceID,
|
"EleCloud_ZTDM"=>$EleCloud_ZTDM,
|
"EleCloud_ZTXX"=>$EleCloud_ZTXX,
|
"EleCloud_Time"=>$EleCloud_Time
|
);
|
echo json_encode($api_json);exit;
|
}
|
break;
|
}
|
|
|
|
|
|
?>
|