php对接金蝶系统
Posted 嚣张无极限
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php对接金蝶系统相关的知识,希望对你有一定的参考价值。
金蝶系统是强大的财务系统,可对公司的财务进行整理,所以有的时候需要去我php系统来对接金蝶系统,为金蝶系统生成各种单据。下面是php对接金蝶的流程。
各种方法已经封装好,直接可以调用就行了。
1.如果是用的TP框架,请将下面的方法放在common.php中,方便系统调用。
1 /*****=======================================对接金蝶需要用到的方法==========================================================******/ 2 /** 3 * 利用curl函数来获取接口数据 4 * @param $url 5 * @param $post_content 6 * @param $cookie_jar 7 * @param $isLogin 8 * @return bool|string 9 */ 10 11 function invoke_post($url,$post_content,$cookie_jar,$isLogin) 12 { 13 $ch = curl_init($url); 14 15 $this_header = array( 16 \'Content-Type: application/json\', 17 \'Content-Length: \'.strlen($post_content) 18 ); 19 20 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, \'POST\'); 21 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 22 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 23 24 curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header); 25 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_content); 26 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 27 if($isLogin){ 28 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); 29 } 30 else{ 31 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); 32 } 33 curl_setopt($ch, CURLOPT_TIMEOUT, 30); 34 35 $result = curl_exec($ch); 36 curl_close($ch); 37 38 return $result; 39 } 40 41 //构造Web API请求格式 42 function create_postdata($args) { 43 $postdata = array( 44 \'format\'=>1, 45 \'useragent\'=>\'ApiClient\', 46 \'rid\'=>create_guid(), 47 \'parameters\'=>$args, 48 \'timestamp\'=>date(\'Y-m-d\'), 49 \'v\'=>\'1.0\' 50 ); 51 52 return json_encode($postdata); 53 } 54 55 //生成guid 56 function create_guid() { 57 $charid = strtoupper(md5(uniqid(mt_rand(), true))); 58 $hyphen = chr(45);// "-" 59 $uuid = chr(123)// "{" 60 .substr($charid, 0, 8).$hyphen 61 .substr($charid, 8, 4).$hyphen 62 .substr($charid,12, 4).$hyphen 63 .substr($charid,16, 4).$hyphen 64 .substr($charid,20,12) 65 .chr(125);// "}" 66 return $uuid; 67 } 68 69 //登陆 70 function invoke_login($cloudUrl,$post_content,$cookie_jar) 71 { 72 $loginurl = $cloudUrl.\'Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc\'; 73 return invoke_post($loginurl,$post_content,$cookie_jar,TRUE); 74 } 75 76 //保存 77 function invoke_save($cloudUrl,$post_content,$cookie_jar) 78 { 79 $invokeurl = $cloudUrl.\'Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc\'; 80 return invoke_post($invokeurl,$post_content,$cookie_jar,FALSE); 81 } 82 83 //审核 84 function invoke_audit($cloudUrl,$post_content,$cookie_jar) 85 { 86 $invokeurl = $cloudUrl.\'Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc\'; 87 return invoke_post($invokeurl,$post_content,$cookie_jar,FALSE); 88 } 89 90 //查看 91 function invoke_view($cloudUrl,$post_content,$cookie_jar) 92 { 93 $invokeurl = $cloudUrl.\'Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc\'; 94 return invoke_post($invokeurl,$post_content,$cookie_jar,FALSE); 95 } 96 /*****************************************对接金蝶的方法结束************************************************************/
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. 数据格式没问题之后就可以用代码来生成金蝶订单了。具体操作如下:
1 /*判断成功之后在进行其他操作*/ 2 if($result[\'LoginResultType\'] == 1){ 3 $data_model = \'{ 4 "Creator": "", 5 "NeedUpDateFields": [], 6 "NeedReturnFields": [], 7 "IsDeleteEntry": "true", 8 "SubSystemId": "", 9 "IsVerifyBaseDataField": "false", 10 "IsEntryBatchFill": "true", 11 "ValidateFlag": "true", 12 "NumberSearch": "true", 13 "InterationFlags": "", 14 "IsAutoSubmitAndAudit": "false", 15 "Model": { 16 "FID": 0, 17 "FBillTypeID": { 18 "FNUMBER": "DKSKD000001" 19 }, 20 "FDATE": "2020-05-14 00:00:00", 21 "FCONTACTUNITTYPE": "BD_Customer", 22 "FPAYUNITTYPE": "BD_Customer", 23 "FCURRENCYID": { 24 "FNumber": "PRE001" 25 }, 26 "FPAYORGID": { 27 "FNumber": "100" 28 }, 29 "FSETTLERATE": 1.0, 30 "FSETTLEORGID": { 31 "FNumber": "100" 32 }, 33 "FSALEORGID": { 34 "FNumber": "100" 35 }, 36 "FDOCUMENTSTATUS": "Z", 37 "FBUSINESSTYPE": "1", 38 "FISINIT": false, 39 "FEXCHANGERATE": 1.0, 40 "FCancelStatus": "A", 41 "FSETTLECUR": { 42 "FNUMBER": "PRE001" 43 }, 44 "FISB2C": false, 45 "FIsWriteOff": false, 46 "FSETTLEMAINBOOKID": { 47 "FNUMBER": "PRE001" 48 }, 49 "FISCARRYRATE": false, 50 "FRECEIVEBILLENTRY": [ 51 { 52 "FPURPOSEID": { 53 "FNumber": "SFKYT01_SYS" 54 }, 55 "FPOSTDATE": "2020-05-14 00:00:00" 56 } 57 ] 58 } 59 }\'; 60 $kingdee_info = array( 61 \'你要操作订单的表单号,测试的时候那个蓝框里的内容\',//业务对象标识FormId 报表不同 表单号不同,切记 62 $data_model//具体Json字串 63 ); 64 $post_content = create_postdata($kingdee_info); 65 66 $res = json_decode(invoke_save($this->cloudUrl,$post_content,$cookie_jar),true) ; 67 //可以打印$res来查看自己的报表生成结果 68 }
6.到此,金蝶的报表生成就结束了,需要注意的是$data_model 的json中的数据 需要换成自己的数据。注意:金蝶里好多字段都是金蝶的编码,要做好本地系统和金蝶系统的编码对应。写的不好,大家不喜勿喷。或者大家有什么需要补充的可以联系我QQ:2280037846。
也可以在下面留言。我会在第一时间回复大家
以上是关于php对接金蝶系统的主要内容,如果未能解决你的问题,请参考以下文章