2010-12-06 4 views
1

저는 Commission Junction 링크가있는 웹 사이트를 만들고 있습니다. 이제 커미션을 나누기위한 커미션 보고서를 처리해야합니다. Daily Publisher Commission Service는 요청에 날짜를 포함하는 규정을 제공하기 때문에 Daily Publisher Commission Service를 사용할 계획입니다. 이제는 CJ 링크를 통해 구매할 수 없으므로 CJ site itself에 제공된 예제 쿼리를 사용하고 있습니다. 나는이 wbservices에 익숙하지 않아 여기에 약간의 의구심을 가지고 있습니다.Commission Junction Daily 발행인위원회 서비스

  1. 실제 반응기는 주어진 것과 정확히 동일합니다. 나는 그것이 <soapenv:Envelope
    것을 포함 할 것인가, 아니면 단지 ns1로 시작 할 것인가를 의미 할 것입니다. ???

  2. I는 변수 $ 결과에 대한 응답을 할당

    $ result_xml = simplexml_load_string ($ 결과)을 수득했다;

그러나 ns1이 네임 스페이스에 정의되어 있지 않다는 오류가 표시됩니다. 그 다음 나는 <soapenv:Envelope 물건을 정상에 줬다. 이제 오류가 사라졌습니다. 그러나 result_xml 변수는 비어 있습니다.

누군가 이전에 해본 적이 있다면 도와주세요. 또는 배울 수있는 좋은 자습서를 제안 해주십시오. 누군가가 완전한 샘플 응답을 줄 수 있고 코드로 확인할 수 있다면 많은 도움이 될 것입니다.

미리 감사드립니다.

답변

1

SOAP 요청에 대한 XML 응답이 될 것입니다 뭔가 같은 :

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soap:Body> 
     <findPublisherCommissionsResponse xmlns="http://api.cj.com"> 
      <out xmlns="http://api.cj.com"> 
       <publisherCommissions xmlns="http://transaction.service.cj.com"> 
        <ns1:PublisherCommissionV2 xmlns:ns1="http://transaction.domain.cj.com"> 
         <actionStatus xmlns="http://transaction.domain.cj.com"> 
          closed 
         </actionStatus> 
         <actionType xmlns="http://transaction.domain.cj.com"> 
          sale 
         </actionType> 
         <adId xmlns="http://transaction.domain.cj.com"> 
          13123123 
         </adId> 
         <advertiserId xmlns="http://transaction.domain.cj.com"> 
          12312312 
         </advertiserId> 
         <advertiserName xmlns="http://transaction.domain.cj.com"> 
          Merchant UK ltd 
         </advertiserName> 
         <commissionAmount xmlns="http://transaction.domain.cj.com"> 
          25 
         </commissionAmount> 
         <country xmlns="http://transaction.domain.cj.com"> 
         </country> 
         <eventDate xmlns="http://transaction.domain.cj.com"> 
          2009-08-28T20:30:44-07:00 
         </eventDate> 
         <lockingDate xmlns="http://transaction.domain.cj.com"> 
          2009-09-10T00:00:00-07:00 
         </lockingDate> 
         <orderId xmlns="http://transaction.domain.cj.com"> 
          1231232 
         </orderId> 
         <original xmlns="http://transaction.domain.cj.com"> 
          true 
         </original> 
         <originalActionId xmlns="http://transaction.domain.cj.com"> 
          12312321312 
         </originalActionId> 
         <postingDate xmlns="http://transaction.domain.cj.com"> 
          2009-08-28T23:30:03-07:00 
         </postingDate> 
         <sId xmlns="http://transaction.domain.cj.com"> 
          googlelink 
         </sId> 
         <saleAmount xmlns="http://transaction.domain.cj.com"> 
          25 
         </saleAmount> 
         <transactionId xmlns="http://transaction.domain.cj.com"> 
          123123123 
         </transactionId> 
         <websiteId xmlns="http://transaction.domain.cj.com"> 
          1231231 
         </websiteId> 
        </ns1:PublisherCommissionV2> 
       </publisherCommissions> 
       <sortBy xmlns="http://transaction.service.cj.com"> 
       </sortBy> 
       <totalResults xmlns="http://transaction.service.cj.com"> 
        1 
       </totalResults> 
      </out> 
     </findPublisherCommissionsResponse> 
    </soap:Body> 
</soap:Envelope> 

당신 어쩌면 SimpleXML을이 (콜론을 좋아하지 않기 때문에 문제가 SimpleXML을 개체에 XML 응답을 구문 분석 : 태그 및 속성에 필요 이름은 SOAP & SimpleXML입니다. 또한 여기에서 확인하십시오 SimpleXML & Namespaces

SOAP 요청이 이미 객체 여야하므로 SimpleXML을 사용하여 구문 분석하려는 이유가 확실하지 않습니다. 응답을 XML로 필요하면 언제든지 serializer을 사용할 수 있습니다. 예를 들어 내 자신의 스크립트에서

나는 같은 것을 사용

// 여기에 코드 $ cj_devkey = "여기에 CJ 키를";

 $ini = ini_set("soap.wsdl_cache_enabled", "0"); 
     $client = new SoapClient("https://pubcommission.api.cj.com/wsdl/version2/publisherCommissionServiceV2.wsdl", array(
      'trace' => true, 
      'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP, 
      'proxy_host' => "proxy" 
     )); 

     $object = $client->findPublisherCommissions(array(
      "developerKey" => $cj_devkey, 
      "date" => '08/28/2009', 
      "dateType" => 'event', 
      "advertiserIds" => '', 
      "websiteIds" => '123456', 
      "actionStatus" => '', 
      "actionTypes" => 'sale', 
      "adIds" => '', 
      "countries" => 'all', 
      "correctionStatus" => 'all', 
      "sortBy" => '', 
      "sortOrder" => '' 
     )); 

인 print_r ($ 개체)를 사용하여 샘플 응답이 반환됩니다

stdClass Object 
(
    [out] => stdClass Object 
     (
      [publisherCommissions] => stdClass Object 
       (
        [PublisherCommissionV2] => stdClass Object 
         (
          [actionStatus] => closed 
          [actionType] => sale 
          [adId] => 123123213 
          [advertiserId] => 2313531 
          [advertiserName] => MERCHANT HERE 
          [commissionAmount] => 25 
          [country] => 
          [eventDate] => 2009-08-28T20:30:44-07:00 
          [lockingDate] => 2009-09-10T00:00:00-07:00 
          [orderId] => 123123 
          [original] => 1 
          [originalActionId] => 123123 
          [postingDate] => 2009-08-28T23:30:03-07:00 
          [sId] => sports 
          [saleAmount] => 25 
          [transactionId] => 12312312 
          [websiteId] => 123123 
         ) 

       ) 

      [sortBy] => 
      [totalResults] => 1 
     ) 

) 

당신이 당신이 좋아하는 물건을 사용할 수있는 개체 요소를 통과하려면 다음을 통해

$num_results = $object->out->totalResults; 

또는 루프를 각 수수료는 다음과 같은 물건으로 지불 :

foreach ($object->out->publisherCommissions as $commission) { 
       $user_id  = $commission->{'sId'}; 
       $transaction_id = $commission->{'transactionId'}; 
       $program_id  = $commission->{'advertiserId'}; 
       $post_date  = $commission->{'postingDate'}; 
       $action_status = $commission->{'actionStatus'}; 
       $amount   = $commission->{'commissionAmount'}; 
}