![在这里插入图片描述](https://img-blog.csdnimg.cn/20210410174731105.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmd6aGFl,size_16,color_FFFFFF,t_70)
## (1)注册云合同账号
平台方需登录云合同官网([https://www.yunhetong.com](https://www.yunhetong.com)),注册一个企业账号并完成实名认证后,联系对接人员协助进行开户。
## (2)创建平台应用
开发者可登录云合同开放平台([http://open.yunhetong.com/](http://open.yunhetong.com/))创建应用(测试阶段请创建测试应用,项目正式请创建正式应用),并记录应用信息,为后续对接工作开展做好准备工作。
## (3)接口
1、获取第三方token
2.1注册个人的时候,走他的(创建个人用户+创建个人印章)
2.2注册企业的时候,走他的(创建企业用户+创建企业印章)
3.根据模版生成合同 contract_templateContract
4.添加签署者
5.合同签署
6. 合同下载/download/contract
## 我写的
实名认证
```php
header("Content-Type: text/html;charset=utf-8");
//获取token
$datass['appId']='2018050916380600068';
$datass['appKey']='JM34AbbcRI9VzQ';
/* 获取长效令牌 */
$token = yunhetong_login("https://api.yunhetong.com/api/auth/login",$datass['appId'],$datass['appKey']);
//创建个人用户
$data['uname']= "用户姓名";////用户姓名(最长 15 字符)成采南
$data['identityRegion']= 0;////身份地区:0 大陆,1 香港,2 台湾,3 澳门
$data['certifyNum']= "3714821********";////身份证号码,应用内唯一 520181198002175907
$data['phoneRegion']= 0;////手机号地区:0 大陆,1 香港、澳门,2 台湾
$data['phoneNo']="183********";//手机号:1.大陆,首位为 1,长度 11 位纯数字;2.香港、澳门,长度为 8 的纯数字;3.台湾,长度为 10 的纯数字
$data['caType']= "B2";//证书类型:B2 长效 CA 证书,固定字段//证书类型:A1 CFCA 场景, A2 CFCA 长效, B1 ZJCA 场景,B2 ZJCA 长效
$signerId= user_person("https://api.yunhetong.com/api/user/person",$data,$token);
/* 保存signerId*/
// 创建个人印模
$datapm['signerId']=$signerId;
$datapm['borderType']='B2';//边框样式,B1=有边框,B2=无边框
$datapm['fontFamily']='F1'; //字体样式,F1=楷体,F2=华文仿宋,F3=华文楷体,F4=微软雅黑
$user_personMoulage= user_personMoulage("https://api.yunhetong.com/api/user/personMoulage",$datapm,$token) ;
/* 保存user_personMoulage*/
/* */
//查询用户
// $user_userInfo_signerIds=user_userInfo_signerIds("https://api.yunhetong.com/api/user/userInfo/signerIds",'',$token);
//var_dump($user_userInfo_signerIds); die; /* 获取印模列表 */
// $signerId=2947848;
//印模Id
//$moulageId=4002512;
//$data['pageNum']=1;
//$pageSize = $data['pageSize'];
//$user_moulageId= user_moulageId("https://api.yunhetong.com/api/user/moulageId",$data,$token);
//var_dump($user_moulageId);
```
生成合同
```php
//根据模版生成合同 contract_templateContract
$datact['contractTitle']="t";
$datact['templateId']="TEM1001739";
$datact['contractNo']="t";//可选参数,不传时默认与合同id相同。
$datact['contractData']=['${bianhao}'=>"替换的内容 1"];//必传参数//替换模版中内容占位符结构化字段,该参数需满足json格式
$contractId=intval(contract_templateContract("https://api.yunhetong.com/api/contract/templateContract",$datact,$token));
//这个需要保存contractId,
```
签署合同
```php
//签署合同
//用户id
$signerId=2947848;
//印模Id
$moulageId=4002512;
//测试 用的
$contractId= 1810291629557794;
//添加签署者
$datacs["idType"]=0;
$datacs["contractId"]=$contractId;
$datacs["signerId"]=$signerId;
$datacs["signPositionType"]=1;//签署的定位方式:0=关键字定位,1=签名占位符定位,2=签署坐标
$datacs["positionContent"]= "jia_sign";//坐标位置为第 20 页(34,57);//对应定位方式的内容,如果用签名占位符 定位可以传多个签名占位符,并以分号隔开,最多 20 个;如果用签署坐标定位, 则该参数包含三个信息:“页面,x 轴坐标,y 轴坐标”(如 20,30,49)
//CURLOPT_POSTFIELDS => "{\"idType\": \"0\",\n\"idContent\": \"$contractId\",\n\"signers\": [{\"signerId\": \"$signerId\",\n\"signPositionType\": \"1\",\n\"positionContent\": \"88046\",\n\"signValidateType\": \"0\"}\n]\n}",
$datacs["signValidateType"]=0;//签署验证方式:0=不校验,1=短信验证;
$datacs["signMode"]=1;//印章使用类型(针对页面签署):0=指定印章, 1=每次绘制
$va=contract_signer("https://api.yunhetong.com/api/contract/signer",$datacs,$token);
//var_dump($va);
//合同签署
$datacs2['idType']=0;//参数类型:0 合同 ID,1 合同自定义编号
$datacs2['idContent']=$contractId;//ID 内容
$datacs2['signerId']=$signerId; //签署者 ID,可选参数,使用指定签署者的令牌调用 接口时可不传该参数
$datacs2['sealClass']=0;//印模 ID,可选参数,不传时使用用户最新印模//签章样式,0=常规样式,2=含摘要样式,3=含签 署时间样式,可选参数,不传时使用常规样式
$contract_sign=contract_sign("https://api.yunhetong.com/api/contract/sign",$datacs2,$token) ;
var_dump($contract_sign);
```
合同下载/
```php
//合同下载/download/contract
$contractId= 1810291629557794;
$datadc['idType']=0;//参数类型:0 合同 ID,1 合同自定义编号
$datadc['idContent']=$contractId;//ID 内容
download_contract("https://api.yunhetong.com/api/download/contract",$datadc,$token);
/* */
```
公共方法
```php
<?php
/* 获取长效令牌 */
function yunhetong_login($url,$appId,$appKey){ // 模拟提交数据函数
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HEADER => true,//false时,取得code
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\"appId\":\"$appId\",\n\"appKey\":\"$appKey\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return "cURL Error #:" . $err.die;
} else {
//echo $response;
$headArr = explode("\r\n", $response);
foreach ($headArr as $loop) {
if(strpos($loop, "token") !== false){
$token = trim(substr($loop, 6));
//$token = trim($loop);
}
if(strpos($loop, "code") !== false){
//$code = trim(substr($loop, 6));
$rp = trim($loop);
}
}
}
$arr = json_decode($rp, true);
$code = $arr['code'];//code=200 说明成功
$msg = $arr['msg'];
//不成功
if($code!="200" || !$token){
print_r( "获取长效令牌,原因:".$msg).die;
}else{
return($token);
}
//
//return $response; // 返回数据,json格式
}
//创建个人用户
function user_person($url,$data,$token){
$userName =$data['uname'];////用户姓名(最长 15 字符)成采南
$identityRegion =$data['identityRegion'];////身份地区:0 大陆,1 香港,2 台湾,3 澳门
$certifyNum =$data['certifyNum'];////身份证号码,应用内唯一 520181198002175907
$phoneRegion =$data['phoneRegion'];////手机号地区:0 大陆,1 香港、澳门,2 台湾
$phoneNo = $data['phoneNo'];//手机号:1.大陆,首位为 1,长度 11 位纯数字;2.香港、澳门,长度为 8 的纯数字;3.台湾,长度为 10 的纯数字
$caType =$data['caType'];//证书类型:B2 长效 CA 证书,固定字段
$curl2 = curl_init();
curl_setopt_array($curl2, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\"caType\": \"$caType\",\n\"certifyNum\": \"$certifyNum\",\n\"identityRegion\": \"$identityRegion\",\n\"phoneNo\": \"$phoneNo\",\n\"phoneRegion\": \"$phoneRegion\",\n\"userName\": \"$userName\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response2 = curl_exec($curl2);
$err2 = curl_error($curl2);
curl_close($curl2);
if ($err2) {
echo "cURL Error #:" . $err2.die;
} else {
//echo $response2;
$arr2 = json_decode($response2, true);
$code2 = $arr2['code'];//code=200 说明成功
$msg2 = $arr2['msg'];
//不成功
if($code2!=200){
print_r( "创建个人用户失败,原因:".$msg2).die;
}else{
$signerId = $arr2['data']['signerId'];
return $signerId;die;
var_dump($arr2);die;
}
}
}
//查询个人用户
function user_userInfo_signerIds($url,$data,$token){
$userName =$data['uname'];////用户姓名(最长 15 字符)成采南
$identityRegion =$data['identityRegion'];////身份地区:0 大陆,1 香港,2 台湾,3 澳门
$certifyNum =$data['certifyNum'];////身份证号码,应用内唯一 520181198002175907
$phoneRegion =$data['phoneRegion'];////手机号地区:0 大陆,1 香港、澳门,2 台湾
$phoneNo = $data['phoneNo'];//手机号:1.大陆,首位为 1,长度 11 位纯数字;2.香港、澳门,长度为 8 的纯数字;3.台湾,长度为 10 的纯数字
$caType =$data['caType'];//证书类型:B2 长效 CA 证书,固定字段
$curl2 = curl_init();
curl_setopt_array($curl2, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response2 = curl_exec($curl2);
$err2 = curl_error($curl2);
curl_close($curl2);
if ($err2) {
echo "cURL Error #:" . $err2.die;
} else {
//echo $response2;
$arr2 = json_decode($response2, true);
$code2 = $arr2['code'];//code=200 说明成功
$msg2 = $arr2['msg'];
//不成功
if($code2!=200){
print_r( "查询个人用户,原因:".$msg2).die;
}else{
$signerId = $arr2['data']['signerId'];
return $signerId;die;
var_dump($arr2);die;
}
}
}
/* 创建个人印模 */
function user_personMoulage($url,$data,$token){
$signerId = $data['signerId'];
$borderType = $data['borderType'];
$fontFamily = $data['fontFamily'];
$curl3 = curl_init();
curl_setopt_array($curl3, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\"signerId\": \"$signerId\",\n\"borderType\": \"$borderType\",\n\"fontFamily\": \"$fontFamily\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response3 = curl_exec($curl3);
$err3 = curl_error($curl3);
curl_close($curl3);
if ($err3) {
echo "cURL Error #:" . $err3.die;
} else {
// echo $response3;
$arr3 = json_decode($response3, true);
$code3 = $arr3['code'];//code=200 说明成功
$msg3 = $arr3['msg'];
//不成功
if($code3!=200){
print_r( "创建个人印模失败,原因:".$msg3).die;
}else{
$moulageId = $arr3['data']['moulageId'];
return $moulageId;die;
var_dump($arr3);die;
}
}
//$moulageId=82;
////print_r($moulageId);
}
/* 获取印模列表 */
///{signerId}/{pageNum}/{pageSize}
function user_moulageId($url,$data,$token){
$signerId = $data['signerId'];
$pageNum = $data['pageNum'];
$pageSize = $data['pageSize'];
$curl3 = curl_init();
curl_setopt_array($curl3, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\"signerId\": \"$signerId\",\n\"pageNum\": \"$pageNum\",\n\"pageSize\": \"$pageSize\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response3 = curl_exec($curl3);
$err3 = curl_error($curl3);
curl_close($curl3);
if ($err3) {
echo "cURL Error #:" . $err3.die;
} else {
// echo $response3;
$arr3 = json_decode($response3, true);
$code3 = $arr3['code'];//code=200 说明成功
$msg3 = $arr3['msg'];
//不成功
if($code3!=200){
print_r( "创建个人印模失败,原因:".$msg3).die;
}else{
$moulageId = $arr3['data']['moulageId'];
return $moulageId;die;
var_dump($arr3);die;
}
}
//$moulageId=82;
////print_r($moulageId);
}
//根据模版生成合同 contract_templateContract
function contract_templateContract($url,$data,$token){
$contractTitle=$data['contractTitle'];
$templateId=$data['templateId'];
$curl4 = curl_init();
curl_setopt_array($curl4, array(
CURLOPT_URL =>$url ,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\"contractTitle\": \"$contractTitle\",\n\"templateId\": \"$templateId\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response4 = curl_exec($curl4);
$err4 = curl_error($curl4);
curl_close($curl4);
if ($err4) {
echo "cURL Error #:" . $err4.die;
} else {
// echo $response4;
$arr4 = json_decode($response4, true);
$code4 = $arr4['code'];//code=200 说明成功
$msg4 = $arr4['msg'];
//不成功
if($code4!=200){
print_r( "创建个人生成合同,原因:".$msg4).die;
}
$contractId = $arr4['data']['contractId'];
$contractId=str_replace(",","",number_format($contractId));
}
print_r($contractId);
//$contractId="1804232025535010";
}
//添加签署者
function contract_signer($url,$data,$token){
$idType= $data["idType"];//参数类型:0 合同 ID,1 合同自定义编号
//ID 内容
$contractId=str_replace(",","",number_format($data["contractId"]));
$signerId=$data["signerId"];//签署者 id
$signPositionType = $data["signPositionType"];////签署的定位方式:0=关键字定位,1=签 名占位符定位,2=签署坐标
$positionContent = $data["positionContent"];////对应定位方式的内容,如果用签名占位符 定位可以传多个签名占位符,并以分号隔开,最多 20 个;如果用签署坐标定位, 则该参数包含三个信息:“页面,x 轴坐标,y 轴坐标”(如 20,30,49)
$signValidateType = $data["signValidateType"];////签署验证方式:0=不校验,1=短信验证
$signMode = $data["signMode"];////印章使用类型(针对页面签署):0=指定印章,1=每次绘制
$curl5 = curl_init();
curl_setopt_array($curl5, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
//CURLOPT_POSTFIELDS => "{\n\"contractTitle\": \"$contractTitle\",\n\"templateId\": \"$templateId\"\n}",
CURLOPT_POSTFIELDS => "{\"idType\": \"$idType\",\n\"idContent\": \"$contractId\",\n\"signers\": [{\"signerId\": \"$signerId\",\n\"signPositionType\": \"1\",\n\"positionContent\": \"$positionContent\",\n\"signValidateType\": \"0\"}\n]\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response5 = curl_exec($curl5);
$err5 = curl_error($curl5);
curl_close($curl5);
if ($err5) {
echo "cURL Error #:" . $err5.die;
} else {
//echo $response5;
$arr5 = json_decode($response5, true);
$code5 = $arr5['code'];//code=200 说明成功
$msg5 = $arr5['msg'];
}
//不成功
if($code5!=200){
print_r( "添加签署者,原因:".$msg5.$code5['code']).die;
}else{
print_r(1);
}
// print_r($code5);
}
//合同签署
function contract_sign($url,$data,$token){
$idType= $data['idType'];
$contractId=str_replace(",","",number_format($data["idContent"]));
$signerId= intval($data['signerId']);
$curl6 = curl_init();
curl_setopt_array($curl6, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n\"idType\": \"$idType\",\n\"idContent\": \"$contractId\",\n\"signerId\": \"$signerId\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response6 = curl_exec($curl6);
$err6 = curl_error($curl6);
curl_close($curl6);
if ($err6) {
echo "cURL Error #:" . $err6.die;
} else {
echo $response6;
$arr6 = json_decode($response6, true);
$code6 = $arr6['code'];//code=200 说明成功
$msg6 = $arr6['msg'];
}
//不成功
if($code6!=200){
print_r( "合同签署失败,原因:".$msg6).die;
}else{
print_r($response6);
}
}
//合同下载/download/contract
function download_contract($url,$data,$token){
$idType= $data['idType'];
$contractId=str_replace(",","",number_format($data["idContent"]));
//合同下载
//$contractId="1804241101415029";
$curl7 = curl_init();
curl_setopt_array($curl7, array(
CURLOPT_URL => "https://api.yunhetong.com/api/contract/download/0/$contractId",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
//CURLOPT_POSTFIELDS => "{\n\"idType\": \"$idType\",\n\"idContent\": \"$contractId\"\n}",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"token: $token"
),
));
$response7 = curl_exec($curl7);
$err7 = curl_error($curl7);
curl_close($curl7);
if ($err7) {
echo "cURL Error #:" . $err7.die;
} else {
echo $response7;
$arr7 = json_decode($response7, true);
$code7 = $arr7['code'];//code=200 说明成功
$msg7 = $arr7['msg'];
$data7 = $arr7['data'];
//不成功
if($code7!=200){
print_r( "合同下载失败,原因:".$msg7).die;
}else{
print_r("合同下载成功!");
header("Location: https://api.yunhetong.com/api/auth/download/$data7");
}
}
}
//查看合同详情
//合同存证
// print_r($code6);
/*
function user_person($url,$data,$token){
}
*/
die;
?>
```
## 整理后的
```php
<?php
/*********************/
/* Version : 10.0 */
/* Author : Tech Lee */
/*********************/
// 实名认证{}
//编号 : $(bianhao)
//甲方 : $(jiafang)
//身份证 : $(idno)
//乙方公司 : $(yifang_company_name)
//乙方代表人 : $(yifang_name)
//乙方信用代码 : $(yifang_xinyongdaima)
//丙方(平台) : $(bingfang)
//丙方(平台) : $(bingfang_xinyongdaima)
//项目名 : $(deal_name)
//
//
//
//甲章 : jia_sign
//乙章 : yi_sidn
//丙章 : bing_sign
function TCaptcha(){
$aid='2024559842';
$AppSecretKey='0rvpQRhlxmJo29MBSuNf5Lg**';
$Ticket=$_POST['ticket'];
$Randstr=$_POST['randstr'];
$UserIP=$_SERVER['REMOTE_ADDR'];
//初始化
$aa = file_get_contents('https://ssl.captcha.qq.com/ticket/verify?aid='.$aid.'&AppSecretKey='.$AppSecretKey.'&Ticket='.$Ticket.'&Randstr='.$Randstr.'&UserIP='.$UserIP);
return $aa;
exit;
}
function membersuser($date=0){
if(is_array($date)){
if(M('members')->where($date)->find()){
return 1;
}else{
return 0;
}
}else{
return 0;
}
}
function create_agreeperson($name , $idCard,$user_phone,$uid){
$glodata = get_global_setting();
$per = C('DB_PREFIX');
//获取长效令牌•访问路径:/auth/login
$tokenurl = "https://api.yunhetong.com/api/auth/login";
$tokendata['appId']=$glodata['appid'];
$tokendata['appKey']=$glodata['appkey'];
$tokendata['signerId']='';
$res = url_request_token($tokendata,$tokenurl);
//创建个人用户•访问路径:/user/person
if($res['code'] == '200'){
$murl = "https://api.yunhetong.com/api/user/person";
$mdata['userName']=$name;
$mdata['identityRegion']=0;
$mdata['certifyNum']=$idCard;
$mdata['phoneRegion']=0;
$mdata['phoneNo']=$user_phone;
$mdata['caType']='B2';
$mres = url_request_json($mdata,$murl,$res['token']);
$mrs = json_decode($mres,true);
writeLog($mdata);
writeLog($mrs);
if($mrs['code']=='200'){
$m['signerid']=$mrs['data']['signerId'];
$newid=M('members')->where("id={$uid}")->save($m);
return true;
}else{
return false;
}
}else{
return false;
}
}
//创建个人印模
function create_personmoulage($uid){
$glodata = get_global_setting();
$per = C('DB_PREFIX');
$minfo = M("members m")->join("{$per}member_info mi ON mi.uid=m.id")->field('m.*,mi.real_name,mi.idcard')->where("m.id={$uid}")->find();
//获取长效令牌•访问路径:/auth/login
$tokenurl = "https://api.yunhetong.com/api/auth/login";
$tokendata['appId']=$glodata['appid'];
$tokendata['appKey']=$glodata['appkey'];
$tokendata['signerId']=$minfo['signerid'];
$res = url_request_token($tokendata,$tokenurl);
//创建个人印章•访问路径:/user/personMoulage
if($res['code'] == '200'){
$murl = "https://api.yunhetong.com/api/user/personMoulage";
$mdata['signerId']=$minfo['signerid'];
$mdata['borderType']='B1';
$mdata['fontFamily']='F1';
$mres = url_request_json($mdata,$murl,$res['token']);
writeLog($mres);
$mrs = json_decode($mres,true);
if($mrs['code']=='200'){
$m['moulageId']=$mrs['data']['moulageId'];
$newid=M('members')->where("id={$uid}")->save($m);
if($newid){
return true;
}
}else{
return false;
}
}else{
return false;
}
}
//创建企业用户
function create_agreecompany($name , $idCard,$user_phone,$uid){
$glodata = get_global_setting();
$per = C('DB_PREFIX');
//获取长效令牌•访问路径:/auth/login
$tokenurl = "https://api.yunhetong.com/api/auth/login";
$tokendata['appId']=$glodata['appid'];
$tokendata['appKey']=$glodata['appkey'];
$tokendata['signerId']='';
$res = url_request_token($tokendata,$tokenurl);
//创建企业用户
if($res['code'] == '200'){
$murl = "https://api.yunhetong.com/api/user/company";
$mdata['userName']=$name;
$mdata['certifyType']=1;
$mdata['certifyNum']=$idCard;
$mdata['phoneNo']=$user_phone;
$mdata['caType']='B2';
$mres = url_request_json($mdata,$murl,$res['token']);
$mrs = json_decode($mres,true);
writeLog($mrs);
if($mrs['code']=='200'){
$m['signerId']=$mrs['data']['signerId'];
$newid=M('members')->where("id={$uid}")->save($m);
return true;
}else{
return false;
}
}else{
return false;
}
}
//创建企业印模
function create_companymoulage($uid){
$glodata = get_global_setting();
$per = C('DB_PREFIX');
$minfo = M("members m")->join("{$per}member_info mi ON mi.uid=m.id")->field('m.*,mi.real_name,mi.idcard')->where("m.id={$uid}")->find();
//获取长效令牌•访问路径:/auth/login
$tokenurl = "https://api.yunhetong.com/api/auth/login";
$tokendata['appId']=$glodata['appid'];
$tokendata['appKey']=$glodata['appkey'];
$tokendata['signerId']=$minfo['signerid'];
$res = url_request_token($tokendata,$tokenurl);
//创建企业印模 访问路径:/api/user/companyMoulage
if($res['code'] == '200'){
$murl = "https://api.yunhetong.com/api/user/companyMoulage";
$mdata['signerId']=$minfo['signerId'];
$mdata['styleType']='1';
$mdata['textContent']='';
$mdata['keyContent']='5103010000417';
$mres = url_request_json($mdata,$murl,$res['token']);
$mrs = json_decode($mres,true);
// var_dump($mrs);
if($mrs['code']=='200'){
$m['moulageId']=$mrs['data']['moulageId'];
$newid=M('members')->where("id={$uid}")->save($m);
if($newid){
return true;
}
}else{
return false;
}
}else{
return false;
}
}
```
- 服务器购买到搭建宝塔
- 结构规范
- php基础
- php简介
- php是什么
- PHP 能做什么
- PHP 如何运行
- 如何了解弱语言
- 安装环境
- 安装LNMP
- 宝塔
- phpstudy
- PHP基本语法
- PHP 标记
- 从 HTML 中分离
- 指令分隔符
- 注释
- php 数据类型
- 类型检测
- 四种标量类型
- boolean(布尔型)
- Integer 整型
- Float 浮点型
- String 字符串类型
- 两种复合类型
- array(数组)
- object(对象)
- 两种特殊类型
- resource(资源)
- NULL(无类型)
- 类型转换
- 变量
- 变量定义和命名规范
- 传值和引用
- 预定义变量
- php预定义变量
- $_SERVER详解
- 变量范围
- 全局变量
- 静态变量
- 可变变量
- 常量
- 常量简介
- 常量定义
- 相比变量
- 魔术常量
- 运算符
- 运算符简介
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 错误控制运算符
- 执行运算符
- 递增(减)运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 新增操作符
- 控制结构
- 控制简介
- if 语句
- while 语句
- for 语句
- foreach 语句
- break 语句
- continue 语句
- switch 语句
- declare 语句
- return 语句
- include 语句
- PHP 函数
- 函数简介
- 用户自定义函数
- 函数的参数
- 返回值
- 可变函数
- 内部函数
- 匿名函数
- PHP 的类和对象
- PHP 的类和对象简介
- 基本概念
- 对象继承
- 属性
- 类常量
- 自动加载对象
- 构造和析构函数
- 访问控制
- 范围解析操作符(::)
- 静态static
- Static 关键字
- 抽象类
- 接口
- 匿名类
- 面向对象其他特性
- const关键字
- final关键字
- abstract用于定义抽象方法和抽象类。
- self、$this、parent::关键字
- 接口(interface)
- trait关键字
- instanceof关键字
- 魔术方法
- 构造函数和析构函数
- 私有属性的设置获取
- __toString()方法
- __clone()方法
- __call()方法
- 类的自动加载
- 会话控制
- cookie
- PHP 操作 cookie
- 项目实战
- SESSION
- Session 的初步介绍与实验准备
- PHP 操作 session
- 项目实战2
- http
- 特点
- 工作过程
- request
- response
- HTTP状态码
- URL
- GET和POST的区别
- HTTPS
- 常用函数
- 常用的字符串函数
- 常用的数组函数
- 常用文件函数
- 常用时间函数
- 常用日历函数
- 常用url函数
- 面试题常见
- 时间戳
- 技术类文档
- 技术开发文档
- 开发环境
- 开发规范
- 注释规范
- 开发目录结构
- 数据库字典
- 路由
- 定时任务
- 获取系统配置
- 系统常用函数
- 后台表单
- 消息队列
- 第三方类库标注
- 需求文档
- 数据库
- MYSQL
- 事务(重点)
- 索引
- 存储过程
- 触发器
- 视图
- 导入导出数据库
- 优化mysql数据库的方法
- MyISAM与InnoDB区别
- 外连接、内连接的区别
- 物理文件结构
- MongoDB
- Redis
- 运用场景和实例
- pgsql
- 服务器
- Nginx
- 正向代理和反向代理
- 负载均衡
- Linux常用命令
- 基本目录和命令
- php开发工具
- phpStorm编辑器
- 安装和汉化
- 链接ftp
- 常用操作
- 常用快捷键
- 自定义快捷键
- 使用快捷键新建目录和文件
- 使用快捷键快速查找文件、类、方法
- 多文件切换
- 快速搜索设置项
- 多点编辑
- 方法重构
- 自定义文件模板和代码片段
- 自定义文件模板
- 自定义代码片段
- Xdebug 调试插件
- 安装Xdebug 调试插件
- 在PHPStorm 中使用 Xdebug 插件调试代码
- Vi Box虚拟机
- Vi Box 虚拟机 Oracle VM VirtualBox
- 虚拟机辅助工具一-Vagrant
- 华硕主板BIOS设置中VT虚拟化技术选项怎么开启 Oracle VM VirtualBox
- 沟通工具
- 文档分享
- 流程图
- 任务分配
- 代码托管
- 缺陷管理
- 设计图
- gitLab
- 安装
- 汉化
- Gitlab 用户和项目管理
- Gitlab 持续集成与自动构建实践
- PHP进阶
- 大流量解决方案
- PSR规范
- RESTFUL规范
- 设计模式
- 单例模式
- 策略模式
- 工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 外观模式
- 享元模式
- 代理模式
- 命令模式
- 中介者模式
- 观察者模式
- 状态模式
- 建筑者模式
- 适配器模式
- 桥接模式
- 装饰器模式
- 排序算法
- 冒泡排序算法
- 二分查找算法
- 直接插入排序算法
- 希尔排序算法
- 选择排序算法
- 快速排序算法
- 常见网络攻击类型
- CSRF攻击
- XSS攻击
- SQL注入
- Cookie攻击
- thinkphp
- thinkphp5命令行
- git
- Git 常用命令操作和基础学习
- 傻瓜与白痴的笔记本
- 学习
- 一、Git 与 GitHub 的来历
- 二、在 GitHub 上创建仓库
- 三、安装
- Windows 上安装 Git
- 安装2
- 四、克隆 GitHub 上的仓库到本地
- 五、GIT基本操作哦
- 六、Git 分支操作
- 一、添加SSH关联授权
- 二、为 Git 命令设置别名
- 三、Git 分支管理
- 七、多人协作 GitHub 部分
- 八、多人协作 Git 部分
- 九、Git tag 和 GitHub releases
- composer
- Composer 基础使用
- 安装和使用
- 在项目中集成PHPmailer
- 认识composer.json和composer.lock文件
- composer的其他命令操作
- 本地创建composer包
- 提交自己的依赖包到composer Packagist
- crontab计划任务
- Linux任务计划crontab
- php 的 计划任务——Crontab
- bootstrap前端框架
- 入门
- 实战技巧
- 后台模板样式——admin
- 第三方接口对接
- 微信
- 敏感词过滤
- 微信图片检测
- 短信类型
- 阿里云短信
- 容联云短信
- 飞鸽短信
- 媒体
- 新闻接口测试
- 免费新闻
- 免费视频
- nba赛事,未测试
- 豆瓣电影接口
- 音乐接口
- 网易短视频接口
- 知乎微信接口
- 百度ai
- 百度语音
- 图片识别
- 腾讯
- 腾讯im
- 腾讯云直播
- 腾讯滑动验证
- 物流快递
- 快递鸟、快递100
- 推送
- 极光推送
- 地图&天气
- 获取城市和天气预报
- 地址获取和定位
- 地址转换经纬度
- 图片类型
- 360新闻图片
- 多平台翻译
- 实名认证
- 七牛云
- 云合同
- 多站点收录查询接口
- 打印机
- 第三方登录
- 微信登录
- 支付
- 支付宝app支付
- 微信提现+退款
- 微信app支付
- 微信支付公式
- 类库
- 图片类
- phpqrcode实战:生成二维码
- 图片处理类
- 验证码类
- 消息类
- PHPMailer
- 分词类
- ik
- PHPAnalysis
- 自己封装的方法
- GD库
- 自动获取图片主题颜色
- 图片转素描
- 生成海报
- 图片转字符
- 验证码
- 图片转黑白灰
- GD库实现图片水印与缩略图
- Imagick扩展
- 将一张image图片转化为字符串的形式
- 基本方法
- 图片路径转base64
- 生成文件后缀图片
- url路径判断拼接
- 防篡改入口文件
- php中文姓名判断
- 可控抽奖
- 特殊截取
- 银行卡位(特殊卡号不支持)
- 微信红包计算
- 数组和对象互转
- php批量更新修改数据库
- base64_img上传
- 删库删目录————跑路
- 字符串特殊符号过滤
- 首字母转成默认头像
- 生成随机字符串
- 根据id转 邀请码
- 日志写入
- 字符串截取,超出显示省略号
- 清除html标签+清除html标签,字符串截取
- 计算时间差的函数和演示
- php判断路径是否是绝对路径,如果不是拼接至绝对路径
- sql 参数过滤
- php敏感词过滤
- 省市区分别截取
- 生成csv
- 无限极分类
- api接口返回封装的方法函数
- xml和数组互转
- 获取thinkph5下控制器和方法名
- 过滤
- 获取服务器信息
- php随机颜色
- 创建多级目录
- 推广码
- 跨域检测
- 二维码
- 文档类
- word
- PHPWord
- tcPdf
- MPDF
- dompdf
- FPDF、Fpdi类库
- excel
- PhpSpreadsheet导入
- phpExcel
- 时间
- PHP-农历+节气+节日等类库
- 时间类库
- 最好用的是人性化时间差
- 文件管理类
- 文件操作类
- 文件夹操作
- php操作ftp的类库
- curl
- 数据库操作类
- Db扩展函数
- 数据库备份
- 仿tp5的Db库
- 不常用mysql
- 自动生成数据库字典
- 字符串
- 字符串操作helper/Str
- 随机生成姓名
- 随机生成类
- php字符串类
- 中文转拼音的类库
- 分类
- 缓存
- 数据验证
- 身份证相关操作
- 安全类
- 表单生成类
- 自动生成表单,未完待续中