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中的数据 需要换成自己的数据。注意:金蝶里好多字段都是金蝶的编码,要做好本地系统和金蝶系统的编码对应。

对接金蝶云的JAVA接口可以按照以下流程进行: 1. 获取接口所需数据:根据金蝶云的文档,确定物料接口所需的数据字段。可以将测试数据保存到一个文件中,或者构造对应的JAVA对象。 2. 转换数据格式:将数据转换成JSON格式,以便与金蝶云的接口进行交互。可以使用JAVA中的JSON库,如Jackson或Gson,将数据对象转换为JSON字符串。 3. 发送请求:使用JAVA的HTTP库,如HttpClient或HttpURLConnection,发送HTTP请求到金蝶云的WebAPI接口。在请求中包含转换后的JSON数据。 4. 处理响应:接收金蝶云返回的响应,可以使用JAVA的JSON库将响应数据解析为JAVA对象,或者直接处理JSON字符串。 5. 处理异常:根据金蝶云的接口文档,处理可能出现的异常情况,如网络连接失败、请求超时等。 下面是一个简单的示例代码,演示了JAVA对接金蝶云物料接口的基本流程: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import java.io.IOException; public class K3CloudAPIExample { public static void main(String[] args) { // 构造请求数据 String jsonData = "{\"materialCode\": \"123\", \"materialName\": \"Test Material\"}"; // 发送请求 HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost request = new HttpPost("https://api.k3cloud.com/materials"); request.addHeader("Content-Type", "application/json"); request.setEntity(new StringEntity(jsonData, "UTF-8")); try { HttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); String responseJson = EntityUtils.toString(entity, "UTF-8"); // 处理响应数据 System.out.println("Response: " + responseJson); } catch (IOException e) { e.printStackTrace(); } } } ``` 请注意,以上代码仅为示例,实际使用时需要根据金蝶云的接口文档进行相应的调整和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值