PHP 调第三方跨域接口示例
// code example
// html input 加验证码 <input type="text" name="captcha" id="captcha" placeholder="验证码" maxlength="">
<img src="captcha.php" onclick="this.src='captcha.php?' + Math.random();" width="" height=""> // jquery ajax
$('#btn_submit').click(function () {
var url = 'api.php/?action=reg';
var dataObj = {"mobile": "", "addr": "",
"remarks": ""
}
// console.log(dataObj)
$.ajax({
type: "POST",
url: url,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(dataObj),
dataType: "json",
success: function (message) {
console.log(message)
if (message.code == '') {
$('#registerWrap .reg_success').show();
}else{ }
},
error: function (message) {
console.log(message)
alert('注册失败');
}
}); }) // api.php
<?php
ini_set('display_errors',); //错误信息
ini_set('display_startup_errors',); //php启动错误信息
ini_set('date.timezone','Asia/Shanghai');
error_reporting(-); //打印出所有的 错误信息
ini_set('error_log', dirname(__FILE__) . '/error_log----------------.txt'); //将出错信息输出到一个文本文件
/**
* 接受用户登陆时提交的验证码
* //1. 获取到用户提交的验证码
* //2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
* // strtolower() 转小写
*/
session_start(); $dataObj = json_decode($HTTP_RAW_POST_DATA); $code = '';
$data = $dataObj->captcha;
$msg = ''; if(strtolower($_SESSION["captcha"]) != strtolower($dataObj->captcha)){
$code = '-2';
$msg = '不正确- '.strtolower($_SESSION["captcha"]);
}else{
$code = '';
$msg = '正确'; $jsonData = json_encode(array(
'custName' => $dataObj->custName,
'contName' => $dataObj->contName,
'mobile' => $dataObj->mobile,
'mailAddress' => $dataObj->mailAddress,
'web' => $dataObj->web,
'fax' => $dataObj->fax,
'tel' => $dataObj->tel,
'addr' => $dataObj->addr,
'remarks' => $dataObj->remarks,
));
$url='https://api.baidu.com/v2/officialWebsite/enquiry'; // 跨域第三方接口
$data = post_curls($url,$jsonData);//返回json
} $json = array (
'code'=>$code,
'data'=>$data,
'msg'=>$msg
);
echo json_encode($json); /**
* POST请求https接口返回内容
* @param string $url [请求的URL地址]
* @param string $post [请求的参数]
* @return string
*/
function post_curls($url,$data){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ); // 对认证证书来源的检查
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, ); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, ); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, ); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, ); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, ); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, ); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓异常
}
curl_close($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据,json格式
}
?> // captcha.php
<?php
/**
* 字母+数字的验证码生成
*/
// 开启session
session_start();
//1.创建黑色画布
$image = imagecreatetruecolor(, ); //2.为画布定义(背景)颜色
$bgcolor = imagecolorallocate($image, , , ); //3.填充颜色
imagefill($image, , , $bgcolor); // 4.设置验证码内容 //4.1 定义验证码的内容
$content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; //4.1 创建一个变量存储产生的验证码数据,便于用户提交核对
$captcha = "";
for ($i = ; $i < ; $i++) {
// 字体大小
$fontsize = ;
// 字体颜色
$fontcolor = imagecolorallocate($image, mt_rand(, ), mt_rand(, ), mt_rand(, ));
// 设置字体内容
$fontcontent = substr($content, mt_rand(, strlen($content)), );
$captcha .= $fontcontent;
// 显示的坐标
$x = ($i * / ) + mt_rand(, );
$y = mt_rand(, );
// 填充内容到画布中
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
$_SESSION["captcha"] = $captcha; //4.3 设置背景干扰元素
for ($$i = ; $i < ; $i++) {
$pointcolor = imagecolorallocate($image, mt_rand(, ), mt_rand(, ), mt_rand(, ));
imagesetpixel($image, mt_rand(, ), mt_rand(, ), $pointcolor);
} //4.4 设置干扰线
for ($i = ; $i < ; $i++) {
$linecolor = imagecolorallocate($image, mt_rand(, ), mt_rand(, ), mt_rand(, ));
imageline($image, mt_rand(, ), mt_rand(, ), mt_rand(, ), mt_rand(, ), $linecolor);
} //5.向浏览器输出图片头信息
header('content-type:image/png'); //6.输出图片到浏览器
imagepng($image); //7.销毁图片
imagedestroy($image);
?>
PHP 调第三方跨域接口示例的更多相关文章
- IE8浏览器跨域接口访问异常的解决办法
IE8版本以下浏览器绝对是一个神奇的存在,忙碌好久,万事具备,居然在ajax调用接口的时候直接爆炸 陈述一下问题 首先是有这样一个接口,请求类型POST,入参JSON,出参JSON,jQuery aj ...
- 从.Net到Java学习第十二篇——SpringBoot+JPA提供跨域接口
从.Net到Java学习系列目录 最近又撸了半个月的前端代码,做app离线存储,然后又花了一周去将过去的wcf项目转webapi,java又被落下了,总感觉我特么像斗地主中的癞子牌,变来变去..... ...
- asp.net中WebResponse 跨域访问示例
前两天,一个朋友让我帮他写这样一个程序:在asp.net里面访问asp的页面,把数据提交对方的数据库后,根据返回的值(返回值为:OK或ERROR),如果为OK再把填入本地数据库.当时,想当然,觉得很简 ...
- 纯 js 实现跨域接口调用 jsonp
开发「bufpay.com 个人即时到账收款平台」的时候,支付页面需要 poll轮询 查询订单状态. bufpay 支付接口如下: 接口地址:https://bufpay.com/api/pay/ai ...
- 如何让谷歌浏览器支持跨域访问(AJAX) AJAX调试跨域接口
以谷歌最新版本为例(2018) 1.在电脑上新建一个目录,例如:C:\MyChromeDevUserData 2.在属性页面中的目标输入框里加上 --disable-web-security -- ...
- .net跨域接口服务器端配置
在项目Config文件中添加一下节点配置 <system.webServer> <httpProtocol> <customHeaders> <add nam ...
- ajax实现jsonp跨域接口
HTML页面代码: <script type="text/javascript"> function UrlSearch(){ var name,value; var ...
- Java调第三方的webservice接口
1.eclipse中add dynamic web project 2.选中项目右键new——> webservice ——> webservice client 在service def ...
- JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
随机推荐
- Linux 多网卡绑定bond
mode=0:负载均衡模式,增加带宽,两块网卡使用的是同一个MAC地址,所以必须配置网卡相连的交换机,这两个端口应采用聚合方式. mode=1:主备模式,一个线断了,另一条自动备援. mode=6:负 ...
- 【COGS2652】秘术「天文密葬法」(长链剖分,分数规划)
[COGS2652]秘术「天文密葬法」(长链剖分,分数规划) 题面 Cogs 上面废话真多,建议直接拉到最下面看一句话题意吧: 给个树,第i个点有两个权值ai和bi,现在求一条长度为m的路径,使得Σa ...
- luogu2605 基站选址 (线段树优化dp)
设f[i][j]表示在第i个村庄建第j个基站的花费 那么有$f[i][j]=min\{f[k][j-1]+w[k,i]\}$,其中w[k,i]表示在k,i建基站,k,i中间的不能被满足的村庄的赔偿金之 ...
- 【php】php位运算及其高级应用
我们之前学过逻辑与(&&) 条件1 && 条件2 当两边条件同时成立时候返回1 逻辑或(||) 条件1 || 条件2 当两边条件只要有一 ...
- 【Linux】linux中文本操作利器grep,awk,sed
grep命令 grep(global search regular expression)是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并把匹配的行打印出来.平时搜索文本中内容的时候是非常方 ...
- CANOE入门(二)
CAPL就是Communication Application Programming Laguage的缩写,CAPL类似于C语言的语法,因此所有的语法请参考C语言教程,这里不在这里进行详述,关于C语 ...
- Navicat Premium 12 破解(MySQL、MariaDB、MongoDB、SQL Server、SQLite)
打开注入到安装目录中的exe中 破解提示(还没好,继续看下去) 如果你安装的是中文版,选一下中文版(英文默认即可),获取一下key(名字和组织可以自定义) 打开Navicat,选择注册(第一次打开选注 ...
- mysql查看正在执行的sql语句
有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...
- (转)java 序列化ID的作用
序列化ID的作用: 其实,这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序 ...
- SpringBoot文件上传
先建工程 只勾选web和freemarker模板 最后 先看一下最终目录结构 先修改pom文件,加入common-io依赖 然后修改Application.yml文件 spring: freemark ...