2017-09-25 88 views
0

嘗試使用PHP SDK for Bing Ads Api嘗試更新CampaignCriterions以獲得以下錯誤Campaign嘗試使用PHP SDK更新Bing Ads廣告系列的CampaignCriterions時,無法創建抽象類錯誤

在搜索解決方案時,我遇到了this code example,並嘗試使用SoapVar編碼對象。我仍然得到同樣的錯誤。也許,我在這裏錯過了一些東西。任何對此的幫助都會很棒。

代碼

$criterion = new CampaignCriterion(); 
$criterion->CampaignId = $campaignCriterion->CampaignId; 
$criterion->Criterion = $radiusCriterion; 
$criterion->Id = $campaignCriterion->Id; 
$criterion->Type = CampaignCriterionType::Radius; 

$request = new UpdateCampaignCriterionsRequest(); 
$request->CampaignCriterions = [$criterion]; 

try { 
    return $campaignManagementServiceProxy->GetService()->UpdateCampaignCriterions($request); 
} catch (SoapFault $se) { 
    print_r($se); 
} 

異常

[ExceptionDetail] => stdClass Object 
(
    [HelpLink] => 
    [InnerException] => 
    [Message] => Cannot create an abstract class. 
    [StackTrace] =>  
     at System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) 
     at ReadCampaignCriterionFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[]) 
     at System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) 
     at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract) 
     at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 id, RuntimeTypeHandle declaredTypeHandle, String name, String ns) 
     at ReadArrayOfCampaignCriterionFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString , XmlDictionaryString , CollectionDataContract) 
     at System.Runtime.Serialization.CollectionDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) 
     at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract) 
     at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns) 
     at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 
     at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 
     at System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName) 
     at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.PartInfo.ReadObject(XmlDictionaryReader reader, XmlObjectSerializer serializer) 
     at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest) 
     at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, Object[] parameters, Boolean isRequest) 
     at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest) 
     at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest) 
     at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeRequest(Message message, Object[] parameters) 
     at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc) 
     at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 
     at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) 
     at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 
    [Type] => System.MemberAccessException 
) 

更新09/26:可出價廣告活動準則 的BiddableCampaignCriterion加入,並導出來自CampaignCriterion,性質,這現在是抽象基類。您必須在添加,獲取和更新廣告系列標準操作時使用BiddableCampaignCriterion而不是CampaignCriterion。

回答

0
  1. 每當CriterionCriterionBid不使用SoapVar加密出現這種情況。
  2. 最終CampaignCriterion應該被加密爲BiddableCampaignCriterion

你的最終代碼應該如下(註釋掉舊代碼):

$criterion = new CampaignCriterion(); 
// $criterion->CampaignId = $campaignCriterion->CampaignId; 
$criterion = $campaignCriterion; 

// $criterion->Criterion = $radiusCriterion; 
$criterion->Criterion = new SoapVar($radiusCriterion, SOAP_ENC_OBJECT, 'RadiusCriterion', $campaignManagementServiceProxy->GetNamespace()); 

$criterion->Id = $campaignCriterion->Id; 
// $criterion->Type = CampaignCriterionType::Radius; 
$criterion->CriterionBid = new SoapVar($campaignCriterion->CriterionBid, SOAP_ENC_OBJECT, 'BidMultiplier', $campaignManagementServiceProxy->GetNamespace()); 

$request = new UpdateCampaignCriterionsRequest(); 
// $request->CampaignCriterions = [$criterion]; 
$request->CampaignCriterions = [new SoapVar($criterion, SOAP_ENC_OBJECT, 'BiddableCampaignCriterion', $campaignManagementServiceProxy->GetNamespace());]; 

try { 
    return $campaignManagementServiceProxy->GetService()->UpdateCampaignCriterions($request); 
} catch (SoapFault $se) { 
    print_r($se); 
} 

參考文獻: - https://msdn.microsoft.com/en-us/library/bing-ads-campaign-management-radiuscriterion.aspx - https://msdn.microsoft.com/en-us/library/mt807658%28v=msads.110%29.aspx?f=255&MSPPError=-2147217396

相關問題