php对接金蝶系统
2021-03-07 03:29
标签:tty sub 订单 val upper 需要 fun 避免 php 金蝶系统是强大的财务系统,可对公司的财务进行整理,所以有的时候需要去我php系统来对接金蝶系统,为金蝶系统生成各种单据。下面是php对接金蝶的流程。 各种方法已经封装好,直接可以调用就行了。 1.如果是用的TP框架,请将下面的方法放在common.php中,方便系统调用。 2.将一些配置项直接在类里面定义好,避免重复多次的书写 3.金蝶的所有操作都需要在登录的状态下进行操作 ,所以就需要先进行登录操作。在你需要生成金蝶报表的时候添加如下的代码: 4.登录成功之后就可以进行报表的操作了,金蝶报表的操作主要靠json来操作,这个json一定要生成正确。这里给大家讲一下怎样做能尽量避免问题。 4.1 首先以开发者的身份登录到金蝶账号中,在右面的菜单中找到webAPI菜单 4.2 然后再左侧选择你要生成的报表的名称,在右面选择你要调用的接口,就会有相应的说明。 4.3 然后点击上面的 在线测试webAPI 按钮,出现调试框:
4.4然后选择自己要调用的接口,来填写测试数据。 4.5 填写完成测试数据之后点击返回数据就可以
4.6 返回的数据最好验证下,避免有必填项遗漏掉。操作如下: 5. 数据格式没问题之后就可以用代码来生成金蝶订单了。具体操作如下: 6.到此,金蝶的报表生成就结束了,需要注意的是$data_model 的json中的数据 需要换成自己的数据。注意:金蝶里好多字段都是金蝶的编码,要做好本地系统和金蝶系统的编码对应。写的不好,大家不喜勿喷。或者大家有什么需要补充的可以联系我QQ:2280037846。 也可以在下面留言。我会在第一时间回复大家 php对接金蝶系统 标签:tty sub 订单 val upper 需要 fun 避免 php 原文地址:https://www.cnblogs.com/seller/p/12890579.html 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 /*****************************************对接金蝶的方法结束************************************************************/
//类的创建根据自己的需要来自行创建
class OrderController extends BaseController
{
protected $cloudUrl = ‘自己金蝶的域名或者是IP地址/K3Cloud/‘;
protected $login = array(‘套账id‘,‘账号‘,‘密码‘,2052);
public function index(){
/*方法内部*/
}
}
/*对接金蝶系统,先做登录,在登录的会话下进行其他操作*/
$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){
/*在这里面进行金蝶报表的生成操作*/
}
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 }