php对接金蝶系统
金蝶系统是强大的财务系统,可对公司的财务进行整理,所以有的时候需要去我php系统来对接金蝶系统,为金蝶系统生成各种单据。下面是php对接金蝶的流程。
各种方法已经封装好,直接可以调用就行了。
1.如果是用的TP框架,请将下面的方法放在common.php中,方便系统调用。
/*****=======================================对接金蝶需要用到的方法==========================================================******/
/**
* 利用curl函数来获取接口数据
* @param $url
* @param $post_content
* @param $cookie_jar
* @param $isLogin
* @return bool|string
*/ function invoke_post($url,$post_content,$cookie_jar,$isLogin)
{
$ch = curl_init($url); $this_header = array(
'Content-Type: application/json',
'Content-Length: '.strlen($post_content)
); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if($isLogin){
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
}
else{
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
}
curl_setopt($ch, CURLOPT_TIMEOUT, 30); $result = curl_exec($ch);
curl_close($ch); return $result;
} //构造Web API请求格式
function create_postdata($args) {
$postdata = array(
'format'=>1,
'useragent'=>'ApiClient',
'rid'=>create_guid(),
'parameters'=>$args,
'timestamp'=>date('Y-m-d'),
'v'=>'1.0'
); return json_encode($postdata);
} //生成guid
function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
} //登陆
function invoke_login($cloudUrl,$post_content,$cookie_jar)
{
$loginurl = $cloudUrl.'Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc';
return invoke_post($loginurl,$post_content,$cookie_jar,TRUE);
} //保存
function invoke_save($cloudUrl,$post_content,$cookie_jar)
{
$invokeurl = $cloudUrl.'Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc';
return invoke_post($invokeurl,$post_content,$cookie_jar,FALSE);
} //审核
function invoke_audit($cloudUrl,$post_content,$cookie_jar)
{
$invokeurl = $cloudUrl.'Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc';
return invoke_post($invokeurl,$post_content,$cookie_jar,FALSE);
} //查看
function invoke_view($cloudUrl,$post_content,$cookie_jar)
{
$invokeurl = $cloudUrl.'Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc';
return invoke_post($invokeurl,$post_content,$cookie_jar,FALSE);
}
/*****************************************对接金蝶的方法结束************************************************************/
2.将一些配置项直接在类里面定义好,避免重复多次的书写
//类的创建根据自己的需要来自行创建
class OrderController extends BaseController
{
protected $cloudUrl = '自己金蝶的域名或者是IP地址/K3Cloud/'; protected $login = array('套账id','账号','密码',2052); public function index(){
/*方法内部*/
}
}
3.金蝶的所有操作都需要在登录的状态下进行操作 ,所以就需要先进行登录操作。在你需要生成金蝶报表的时候添加如下的代码:
/*对接金蝶系统,先做登录,在登录的会话下进行其他操作*/
$cookie_jar = tempnam('./tmp','CloudSession');//保存登录后的session
$post_content = create_postdata($this->login);
/*返回登录信息如果 LoginResultType == 1 说明登录成功*/
$result = json_decode(invoke_login($this->cloudUrl,$post_content,$cookie_jar),true); /*判断成功之后在进行其他操作*/
if($result['LoginResultType'] == 1){
/*在这里面进行金蝶报表的生成操作*/
}
4.登录成功之后就可以进行报表的操作了,金蝶报表的操作主要靠json来操作,这个json一定要生成正确。这里给大家讲一下怎样做能尽量避免问题。
4.1 首先以开发者的身份登录到金蝶账号中,在右面的菜单中找到webAPI菜单

4.2 然后再左侧选择你要生成的报表的名称,在右面选择你要调用的接口,就会有相应的说明。

4.3 然后点击上面的 在线测试webAPI 按钮,出现调试框:

4.4然后选择自己要调用的接口,来填写测试数据。

4.5 填写完成测试数据之后点击返回数据就可以

4.6 返回的数据最好验证下,避免有必填项遗漏掉。操作如下:

5. 数据格式没问题之后就可以用代码来生成金蝶订单了。具体操作如下:
/*判断成功之后在进行其他操作*/
if($result['LoginResultType'] == 1){
$data_model = '{
"Creator": "",
"NeedUpDateFields": [],
"NeedReturnFields": [],
"IsDeleteEntry": "true",
"SubSystemId": "",
"IsVerifyBaseDataField": "false",
"IsEntryBatchFill": "true",
"ValidateFlag": "true",
"NumberSearch": "true",
"InterationFlags": "",
"IsAutoSubmitAndAudit": "false",
"Model": {
"FID": 0,
"FBillTypeID": {
"FNUMBER": "DKSKD000001"
},
"FDATE": "2020-05-14 00:00:00",
"FCONTACTUNITTYPE": "BD_Customer",
"FPAYUNITTYPE": "BD_Customer",
"FCURRENCYID": {
"FNumber": "PRE001"
},
"FPAYORGID": {
"FNumber": "100"
},
"FSETTLERATE": 1.0,
"FSETTLEORGID": {
"FNumber": "100"
},
"FSALEORGID": {
"FNumber": "100"
},
"FDOCUMENTSTATUS": "Z",
"FBUSINESSTYPE": "1",
"FISINIT": false,
"FEXCHANGERATE": 1.0,
"FCancelStatus": "A",
"FSETTLECUR": {
"FNUMBER": "PRE001"
},
"FISB2C": false,
"FIsWriteOff": false,
"FSETTLEMAINBOOKID": {
"FNUMBER": "PRE001"
},
"FISCARRYRATE": false,
"FRECEIVEBILLENTRY": [
{
"FPURPOSEID": {
"FNumber": "SFKYT01_SYS"
},
"FPOSTDATE": "2020-05-14 00:00:00"
}
]
}
}';
$kingdee_info = array(
'你要操作订单的表单号,测试的时候那个蓝框里的内容',//业务对象标识FormId 报表不同 表单号不同,切记
$data_model//具体Json字串
);
$post_content = create_postdata($kingdee_info); $res = json_decode(invoke_save($this->cloudUrl,$post_content,$cookie_jar),true) ;
//可以打印$res来查看自己的报表生成结果
}
6.到此,金蝶的报表生成就结束了,需要注意的是$data_model 的json中的数据 需要换成自己的数据。注意:金蝶里好多字段都是金蝶的编码,要做好本地系统和金蝶系统的编码对应。写的不好,大家不喜勿喷。或者大家有什么需要补充的可以联系我QQ:2280037846。
也可以在下面留言。我会在第一时间回复大家
php对接金蝶系统的更多相关文章
- Akka(25): Stream:对接外部系统-Integration
在现实应用中akka-stream往往需要集成其它的外部系统形成完整的应用.这些外部系统可能是akka系列系统或者其它类型的系统.所以,akka-stream必须提供一些函数和方法来实现与各种不同类型 ...
- E-WORK 对接 MTS 系统
E-WORK 目前的 E-WORK 系统主要包含了如下功能: 技能类型的管理 比如说品质检验技能.测试技能(成品测试或半成品测试).组装装配技能(打螺丝.合壳.点胶等).包装技能(封箱. ...
- C#对接JAVA系统遇到的AES加密坑
起因对接合作伙伴的系统,需要对数据进行AES加密 默认的使用了已经写好的帮助类中加密算法,发现结果不对,各种尝试改变加密模式改变向量等等折腾快一下午.最后网上查了下AES在JAVA里面的实现完整代码如 ...
- 腾讯EC .net API对接第三方系统
最近公司销售部门用到了腾讯EC,实现公司内部OA系统与腾讯ec的数据同步,要求如下: 1.OA内部系统账号与腾讯ec登陆账号同步 2.首先做义工客户端工具用来把现有客户导入到EC,销售人员的客户信息与 ...
- OpenLdap 对接内部系统(Gitlab+Wiki+Jumpserver+Openvpn)配置
LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议.目录是一个特殊的数据库,它的数据经常 ...
- curl请求的get.post.put.delete对接其他系统接口方法
class HttpCurl{ //控客云平台的appid private $appId = xxxxxx; //控客云平台的appkey private $appKey = 'xxxxxxxxxxx ...
- .NetCore对接各大财务软件凭证API——金蝶系列(1)
哈喽,又和大家见面了,虽然看文章的小伙伴不多,但是我相信总有一天,自己写的这些文章或多或少会对其他人有些帮助,让他们在相关的业务开发下能少走些弯路,那我的目的就达到了,好了,今天就正式开始我们的系列了 ...
- 记录用友T+接口对接的心酸历程
前言:公司的业务主要是对接财务系统做单据传输或者凭证处理的,难免少不了和各大财务软件做数据对接,其中当然是必须通过接口来传递数据了.于是乎,用友T+的版本来了,对接的工作自然是我来做,可没想到就是这样 ...
- WHMCS系统API调用
WHMCS:域名管理系统,现在网络上很多借助此系统Shadowsocks插件+ShadowsocksR多用户服务端进行VPN的售卖,能做到流量控制等. 在对接此系统的API时,我发现了很多功能都已经实 ...
随机推荐
- 2007 NOIP T1奖学金
奖学金(07NOIPT1): [题目描述] 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果 ...
- python 异步 I/O
如果你想了解异步编程,那么必然会涉及出许多相关概念. 堵塞/非堵塞 同步/异步 多进程/多线程/协程 为什么我要学习这个话,因为我想搞懂异步框架和异步接口的调用.所以,我的学习路线是这样的: 1.py ...
- Goldeneye 靶机过关记录
注:因记录时间不同,记录中1.111和1.105均为靶机地址. 1信息收集 1.1得到目标,相关界面如下: 1.2简单信息收集 wappalyzer插件显示: web服务器:Apache 2.4.7 ...
- APT32入侵我国,试图窃取COVID-19相关情报
新闻一篇: 一直以来,APT32都以东南亚为攻击目标,并且是近几年来针对中国大陆进行攻击活动最活跃的APT攻击组织,没有之一.此次再将目标对准中国,与新冠疫情离不开关系. 4月22日,Fireye发布 ...
- C# 序列化之二进制
序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. 一般有三种方式:1.是使用BinaryF ...
- 2020/4/26 大数据的zookeeper分布式安装
大数据的zookeeper分布式安装 **** 前面的文章已经提到Hadoop的伪分布式安装.现在就在原有的基础上安装zookeeper. 首先启动Hadoop平台 [root@master ~]# ...
- 数值计算方法实验之Hermite 多项式插值 (Python 代码)
一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...
- Python机器学习笔记:K-Means算法,DBSCAN算法
K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...
- iOS appium
1.如果没有安装过Homebrew,先安装homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ ...
- thinkphp5.0--auth权限
一般auth权限有四个表: think_admin:注册表, think_auth_group_access:用户组明细表(关联), think_auth_group:用户组表, think_arut ...