金蝶系统是强大的财务系统,可对公司的财务进行整理,为金蝶系统生成各种单据。下面是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中的数据 需要换成自己的数据。注意:金蝶里好多字段都是金蝶的编码,要做好本地系统和金蝶系统的编码对应。
转载作品,原作者:心平氣和,文章来源:https://www.toutiao.com/article/7117452599141483041