you should use budget resource.
and you can check Campaign resource class.
It is important to look at the class definition and variable types and names while using the google ads api.
this is my past working code snippet.
$budgetResourceName = self::addCampaignBudget($googleAdsClient, $cam_infos['customer_id'], $cam_infos['campaign_budget']);
.....
$campaign = new Campaign([
'name' => $cam_infos['campaign_name'],
'advertising_channel_type' => $cam_infos['advertising_channel_type'],
'status' => $cam_infos['status'],
'manual_cpc' => new ManualCpc(['enhanced_cpc_enabled'=>true]),
'bidding_strategy_type'=>$cam_infos['bidding_strategy_type'],
'tracking_url_template'=>$cam_infos['tracking_template'],
'campaign_budget' => $budgetResourceName,
'network_settings' => $networkSettings,
'start_date' => $cam_infos['start_date'],
//'end_date' => $cam_infos['end_date']
]);
......
private static function addCampaignBudget(GoogleAdsClient $googleAdsClient, int $customerId,int $campaign_budget){
// Creates a campaign budget.
$budget = new CampaignBudget([
'name' => 'non shared budget#' . Helper::getPrintableDatetime(),
'delivery_method' => BudgetDeliveryMethod::STANDARD,
'amount_micros' => $campaign_budget,
'explicitly_shared' => false // this is for non-shared budget
]);
// Creates a campaign budget operation.
$campaignBudgetOperation = new CampaignBudgetOperation();
$campaignBudgetOperation->setCreate($budget);
// Issues a mutate request.
$campaignBudgetServiceClient = $googleAdsClient->getCampaignBudgetServiceClient();
$response = $campaignBudgetServiceClient->mutateCampaignBudgets(
$customerId,
[$campaignBudgetOperation]
);
/** @var CampaignBudget $addedBudget */
$addedBudget = $response->getResults()[0];
//printf("Added budget named '%s'%s", $addedBudget->getResourceName(), PHP_EOL);
return $addedBudget->getResourceName();