金蝶系统是强大的财务系统,可对公司的财务进行整理,所以有的时候需要去我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。

也可以在下面留言。我会在第一时间回复大家

最新文章

  1. iOS---SQLite数据库框架之FMDB -Swift
  2. C++类的构造、拷贝构造、析构函数等
  3. linux 上不去网
  4. shell脚本学习之Bash shell 里各种括号的用法
  5. Extjs之rowEditing编辑状态时列不对齐
  6. Python下划线的使用 _ __ __obj__
  7. 【Web探索之旅】第二部分第五课:响应式网站和移动应用
  8. spark source code 分析之ApplicationMaster overview(yarn deploy client mode)
  9. xpath 在firefox,chrome中正常,在requests中不正常的解决。
  10. VMware6.0-vCenter的安装准备及安装
  11. vuejs的双向绑定实现原理
  12. Windows下设置oracle数据库定时备份
  13. CSS 小结笔记之清除浮动
  14. 别再犯低级错误,带你了解更新缓存的四种Desigh Pattern
  15. 百度2017春招<度度熊回家问题>
  16. css table 布局 与 JavaScript 指定区域打印功能
  17. node.js使用Sequelize 操作mysql
  18. 洛谷P1392 取数 [堆]
  19. floyd路径记录
  20. js 代码收集

热门文章

  1. 1. esc 安装 jenkins
  2. [Laravel框架学习二]:Laravel的CURD和查询构造器的CURD,以及聚合函数
  3. [HTML] <base>链接默认打开方式标签元素
  4. HTTPie:替代 Curl 和 Wget 的现代 HTTP 命令行客户端
  5. 认证与授权】Spring Security系列之认证流程解析
  6. python机器学习的常用算法
  7. 是时候学习python了
  8. PHP扩展Swoole的代码重载机制
  9. PL/SQL 九九乘法表
  10. Django中search fields报错:related Field has invalid lookup: icontains