二维码编解码 PHP调用示例代码

支持二维码的生成与识别。二维码生成时,直接返回生成的二维码图片

  1.     二维码生成
    复制代码
  2.     二维码解码
    复制代码

注意,该示例代码仅适用于 www.apishop.net网站下API 使用该产品前,您需要通过 https://www.apishop.net/#/api/detail/?productID=128申请API服务

1、二维码生成

<?php  
$method = "POST";  
$url = "https://api.apishop.net/common/qrcode/content2QrCode";  
$headers = NULL;  
$params = array(              
        "content"=>"" //内容            
        "size"=>"" //图片大小(范围:1~10),默认为4【注:手机扫描,size为4即可】              
        "level"=>"" //容错(0:L,1:M,:2:H,3:Q),默认为0           
        "margin"=>"" //边框大小(范围:1~10),默认为3         
);  
  
$result = apishop_curl($method, $url, $headers, $params);  
If ($result) {  
   $body = json_decode($result["body"], TRUE);  
   $status_code = $body["statusCode"];  
   If ($status_code == "000000") {  
       //状态码为000000, 说明请求成功  
       echo "请求成功:" . $result["body"];  
   } else {  
       //状态码非000000, 说明请求失败  
       echo "请求失败:" . $result["body"];  
   }  
} else {  
   //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改  
   echo "发送请求失败";  
}  
  
/** 
  * 转发请求到目的主机 
  * @param $method string 请求方法 
  * @param $URL string 请求地址 
  * @param null $headers 请求头 
  * @param null $param 请求参数 
  * @return array|bool 
  */  
function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL)  
{  
   // 初始化请求  
   $require = curl_init($URL);  
   // 判断是否HTTPS  
   $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;  
   // 设置请求方式  
   switch ($method) {  
       case "GET":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");  
           break;  
       case "POST":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");  
           break;  
       default:  
           return FALSE;  
   }  
   if ($param) {  
       curl_setopt($require, CURLOPT_POSTFIELDS, $param);  
   }  
   if ($isHttps) {  
       // 跳过证书检查  
       curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);  
       // 检查证书中是否设置域名  
       curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);  
   }  
   if ($headers) {  
   // 设置请求头  
   curl_setopt($require, CURLOPT_HTTPHEADER, $headers);  
   }  
   // 返回结果不直接输出  
   curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);  
   // 重定向  
   curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);  
   // 把返回头包含再输出中  
   curl_setopt($require, CURLOPT_HEADER, TRUE);  
   // 发送请求  
   $response = curl_exec($require);  
   // 获取头部长度  
   $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);  
   // 关闭请求  
   curl_close($require);  
   if ($response) {  
       // 返回头部字符串  
       $header = substr($response, 0, $headerSize);  
       // 返回体  
       $body = substr($response, $headerSize);  
       // 过滤隐藏非法字符  
       $bodyTemp = json_encode(array(  
            0 => $body  
       ));  
       $bodyTemp = str_replace("", "", $bodyTemp);  
       $bodyTemp = json_decode($bodyTemp, TRUE);  
       $body = trim($bodyTemp[0]);  
       // 将返回结果头部转成数组  
       $respondHeaders = array();  
       $header_rows = array_filter(explode(PHP_EOL, $header), "trim");  
       foreach ($header_rows as $row) {  
           $keylen = strpos($row, ":");  
           if ($keylen) {  
               $respondHeaders[] = array(  
                   "key" => substr($row, 0, $keylen),  
                   "value" => trim(substr($row, $keylen + 1))  
               );  
           }  
       }  
       return array(  
           "headers" => $respondHeaders,  
           "body" => $body  
       );  
   } else {  
       return FALSE;  
   }  
}  
[php] view plain copy
<?php  
$method = "POST";  
$url = "https://api.apishop.net/common/qrcode/content2QrCode";  
$headers = NULL;  
$params = array(              
        "content"=>"" //内容            
        "size"=>"" //图片大小(范围:1~10),默认为4【注:手机扫描,size为4即可】              
        "level"=>"" //容错(0:L,1:M,:2:H,3:Q),默认为0           
        "margin"=>"" //边框大小(范围:1~10),默认为3         
);  
  
$result = apishop_curl($method, $url, $headers, $params);  
If ($result) {  
   $body = json_decode($result["body"], TRUE);  
   $status_code = $body["statusCode"];  
   If ($status_code == "000000") {  
       //状态码为000000, 说明请求成功  
       echo "请求成功:" . $result["body"];  
   } else {  
       //状态码非000000, 说明请求失败  
       echo "请求失败:" . $result["body"];  
   }  
} else {  
   //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改  
   echo "发送请求失败";  
}  
  
/** 
  * 转发请求到目的主机 
  * @param $method string 请求方法 
  * @param $URL string 请求地址 
  * @param null $headers 请求头 
  * @param null $param 请求参数 
  * @return array|bool 
  */  
function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL)  
{  
   // 初始化请求  
   $require = curl_init($URL);  
   // 判断是否HTTPS  
   $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;  
   // 设置请求方式  
   switch ($method) {  
       case "GET":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");  
           break;  
       case "POST":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");  
           break;  
       default:  
           return FALSE;  
   }  
   if ($param) {  
       curl_setopt($require, CURLOPT_POSTFIELDS, $param);  
   }  
   if ($isHttps) {  
       // 跳过证书检查  
       curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);  
       // 检查证书中是否设置域名  
       curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);  
   }  
   if ($headers) {  
   // 设置请求头  
   curl_setopt($require, CURLOPT_HTTPHEADER, $headers);  
   }  
   // 返回结果不直接输出  
   curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);  
   // 重定向  
   curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);  
   // 把返回头包含再输出中  
   curl_setopt($require, CURLOPT_HEADER, TRUE);  
   // 发送请求  
   $response = curl_exec($require);  
   // 获取头部长度  
   $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);  
   // 关闭请求  
   curl_close($require);  
   if ($response) {  
       // 返回头部字符串  
       $header = substr($response, 0, $headerSize);  
       // 返回体  
       $body = substr($response, $headerSize);  
       // 过滤隐藏非法字符  
       $bodyTemp = json_encode(array(  
            0 => $body  
       ));  
       $bodyTemp = str_replace("", "", $bodyTemp);  
       $bodyTemp = json_decode($bodyTemp, TRUE);  
       $body = trim($bodyTemp[0]);  
       // 将返回结果头部转成数组  
       $respondHeaders = array();  
       $header_rows = array_filter(explode(PHP_EOL, $header), "trim");  
       foreach ($header_rows as $row) {  
           $keylen = strpos($row, ":");  
           if ($keylen) {  
               $respondHeaders[] = array(  
                   "key" => substr($row, 0, $keylen),  
                   "value" => trim(substr($row, $keylen + 1))  
               );  
           }  
       }  
       return array(  
           "headers" => $respondHeaders,  
           "body" => $body  
       );  
   } else {  
       return FALSE;  
   }  
}  
复制代码

2、二维码解码

<?php  
$method = "POST";  
$url = "https://api.apishop.net/common/qrcode/qrCode2Content";  
$headers = NULL;  
$params = array(              
        "image"=>"" //二维码图片文件         
);  
  
$result = apishop_curl($method, $url, $headers, $params);  
If ($result) {  
   $body = json_decode($result["body"], TRUE);  
   $status_code = $body["statusCode"];  
   If ($status_code == "000000") {  
       //状态码为000000, 说明请求成功  
       echo "请求成功:" . $result["body"];  
   } else {  
       //状态码非000000, 说明请求失败  
       echo "请求失败:" . $result["body"];  
   }  
} else {  
   //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改  
   echo "发送请求失败";  
}  
  
/** 
  * 转发请求到目的主机 
  * @param $method string 请求方法 
  * @param $URL string 请求地址 
  * @param null $headers 请求头 
  * @param null $param 请求参数 
  * @return array|bool 
  */  
function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL)  
{  
   // 初始化请求  
   $require = curl_init($URL);  
   // 判断是否HTTPS  
   $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;  
   // 设置请求方式  
   switch ($method) {  
       case "GET":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");  
           break;  
       case "POST":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");  
           break;  
       default:  
           return FALSE;  
   }  
   if ($param) {  
       curl_setopt($require, CURLOPT_POSTFIELDS, $param);  
   }  
   if ($isHttps) {  
       // 跳过证书检查  
       curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);  
       // 检查证书中是否设置域名  
       curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);  
   }  
   if ($headers) {  
   // 设置请求头  
   curl_setopt($require, CURLOPT_HTTPHEADER, $headers);  
   }  
   // 返回结果不直接输出  
   curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);  
   // 重定向  
   curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);  
   // 把返回头包含再输出中  
   curl_setopt($require, CURLOPT_HEADER, TRUE);  
   // 发送请求  
   $response = curl_exec($require);  
   // 获取头部长度  
   $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);  
   // 关闭请求  
   curl_close($require);  
   if ($response) {  
       // 返回头部字符串  
       $header = substr($response, 0, $headerSize);  
       // 返回体  
       $body = substr($response, $headerSize);  
       // 过滤隐藏非法字符  
       $bodyTemp = json_encode(array(  
            0 => $body  
       ));  
       $bodyTemp = str_replace("", "", $bodyTemp);  
       $bodyTemp = json_decode($bodyTemp, TRUE);  
       $body = trim($bodyTemp[0]);  
       // 将返回结果头部转成数组  
       $respondHeaders = array();  
       $header_rows = array_filter(explode(PHP_EOL, $header), "trim");  
       foreach ($header_rows as $row) {  
           $keylen = strpos($row, ":");  
           if ($keylen) {  
               $respondHeaders[] = array(  
                   "key" => substr($row, 0, $keylen),  
                   "value" => trim(substr($row, $keylen + 1))  
               );  
           }  
       }  
       return array(  
           "headers" => $respondHeaders,  
           "body" => $body  
       );  
   } else {  
       return FALSE;  
   }  
}  
[php] view plain copy
<?php  
$method = "POST";  
$url = "https://api.apishop.net/common/qrcode/qrCode2Content";  
$headers = NULL;  
$params = array(              
        "image"=>"" //二维码图片文件         
);  
  
$result = apishop_curl($method, $url, $headers, $params);  
If ($result) {  
   $body = json_decode($result["body"], TRUE);  
   $status_code = $body["statusCode"];  
   If ($status_code == "000000") {  
       //状态码为000000, 说明请求成功  
       echo "请求成功:" . $result["body"];  
   } else {  
       //状态码非000000, 说明请求失败  
       echo "请求失败:" . $result["body"];  
   }  
} else {  
   //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改  
   echo "发送请求失败";  
}  
  
/** 
  * 转发请求到目的主机 
  * @param $method string 请求方法 
  * @param $URL string 请求地址 
  * @param null $headers 请求头 
  * @param null $param 请求参数 
  * @return array|bool 
  */  
function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL)  
{  
   // 初始化请求  
   $require = curl_init($URL);  
   // 判断是否HTTPS  
   $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;  
   // 设置请求方式  
   switch ($method) {  
       case "GET":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");  
           break;  
       case "POST":  
           curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");  
           break;  
       default:  
           return FALSE;  
   }  
   if ($param) {  
       curl_setopt($require, CURLOPT_POSTFIELDS, $param);  
   }  
   if ($isHttps) {  
       // 跳过证书检查  
       curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);  
       // 检查证书中是否设置域名  
       curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);  
   }  
   if ($headers) {  
   // 设置请求头  
   curl_setopt($require, CURLOPT_HTTPHEADER, $headers);  
   }  
   // 返回结果不直接输出  
   curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);  
   // 重定向  
   curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);  
   // 把返回头包含再输出中  
   curl_setopt($require, CURLOPT_HEADER, TRUE);  
   // 发送请求  
   $response = curl_exec($require);  
   // 获取头部长度  
   $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);  
   // 关闭请求  
   curl_close($require);  
   if ($response) {  
       // 返回头部字符串  
       $header = substr($response, 0, $headerSize);  
       // 返回体  
       $body = substr($response, $headerSize);  
       // 过滤隐藏非法字符  
       $bodyTemp = json_encode(array(  
            0 => $body  
       ));  
       $bodyTemp = str_replace("", "", $bodyTemp);  
       $bodyTemp = json_decode($bodyTemp, TRUE);  
       $body = trim($bodyTemp[0]);  
       // 将返回结果头部转成数组  
       $respondHeaders = array();  
       $header_rows = array_filter(explode(PHP_EOL, $header), "trim");  
       foreach ($header_rows as $row) {  
           $keylen = strpos($row, ":");  
           if ($keylen) {  
               $respondHeaders[] = array(  
                   "key" => substr($row, 0, $keylen),  
                   "value" => trim(substr($row, $keylen + 1))  
               );  
           }  
       }  
       return array(  
           "headers" => $respondHeaders,  
           "body" => $body  
       );  
   } else {  
       return FALSE;  
   }  
}  





复制代码

转载于:https://juejin.im/post/5ae1971b6fb9a07aae14dfe2

二维码编码解码器源码 本源码实现可以在C#中使用的1D/2D编码解码器。条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码;二维码也开始应用到很多场合,如火车票有二维码识别、网易的首页有二维码图标,用户只需要用手机扫描一下就可以看到手机版网易的网址,免去了输入长串字符的麻烦。 条形码的标准: 条形码的标准有ENA条形码、UPC条形码、二五条形码、交叉二五条形码、库德巴条形码、三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码。EAN商品条形码亦称通用商品条形码,由国际物品编码协会制定,通用于世界各地,是目前国际上使用最广泛的一种商品条形码。我国目前在国内推行使用的也是这种商品条形码。EAN商品条形码分为EAN-13(标准版)和EAN-8(缩短版)两种。 二维码的编码标准: 全球现有的二维码多达200种以上,其中常见的技术标准有PDF417(美系标准),QRCode(日系标准),Code49,Code16K,CodeOne,DM(韩系标准),GM(中国标准),CM(中国标准)等20余种。用得最多的是QRcode。 下面借助google的开源项目zxing来实现1D/2D的编码和解码 zxing的功能还是很强大的,最初是用java编写,并支持Android、ios、symbian等手机操作系统。 不过不知是何原因,该官网连一个例子也没有,文档也是字典式的把所有类列出来,一点都没为读者考虑。 下面我把如果使用zxing完成上图所示例子讲解一遍,供初学者参考: 1.我们新建一个Winform测试项目; 2.从官网下载zxing开源项目,大概16m的样子,解压缩后打开zxing-2.1\csharp目录,将该目录拷贝到我们新建的Winform项目下(方便调试和看源码,并非一定要如此); 3.winform项目中添加对zxing项目的引用; 4.按上图所示例子建好控件,“生成条形码”的代码如下: 其中需要注意BarcodeFormat参数,可以打开定义看到具体的编码方式,自己百度每种编码方式对输入的要求。 这里EAN_13编码要求是13位长度的数字,并且满足:把所有偶数序号位上的数相加求和,用求出的和乘3,再把所有奇数序号上的数相加求和,用求出的和加上刚才偶数序号上的数,然后得出和能被10整除。(这个规则校验在UPCEANReader类的checkStandardUPCEANChecksum方法里面,如果不需要,可以去掉) 注意编码问题,在com.google.zxing.qrcode.encoder.Encoder类中修改默认编码为utf-8,否则解码出现的是乱码。 System.String DEFAULT_BYTE_MODE_ENCODING = "UTF-8"; 此处之前是"ISO-8859-1",之所以改成UTF-8是因为,在解码的时候程序会猜测可能的编码,如果猜测失败则默认是UTF-8,代码在com.google.zxing.qrcode.decoder.DecodedBitStreamParser类的guessEncoding方法中。 所以此开源项目也缺少全局性思考,连编码和解码的默认编码方式都不一致。 经网友反映,还是有些中文会出现解码成乱码,而有些又可以,估计还是guessEncoding方法猜测编码出现了偏差,直接将guessEncoding方法写成返回UTF8就行了。 4.实现图片解码,即把条形码或二维码图片解码成其真实内容,当然在pc上应用不大,但可能只是还没发现而已,代码如下: opFilePath是图片路径,你可以用openFileDialog控件打开文件来得到路径。 注意: 点解码按钮前要先选择一张二维码或条形码图片,即先点击“…”按钮选择图片,然后再点“解码”按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值