2017-06-18 4 views
0
  • aktualisiert - die JSON-Datei würde zurückkehren, aber es wird das Abrechnungsdatum überhaupt nicht ändern.(Aktualisiert) Laravel PUT-Methode funktioniert nicht

  • Referenz 1: Die offizielle Dokumentation über changing the billing date.

  • Referenz2: ihr Beispielcode im Detail:

    <?php 
    
    $request = new HttpRequest(); 
    $request->setUrl('https://domain.chargify.com/subscriptions/$subscriptionId.json'); 
    $request->setMethod(HTTP_METH_PUT); 
    
    $request->setHeaders(array(
        'authorization' => 'Basic YXBpa2V5Og==', 
        'content-type' => 'application/json' 
    )); 
    
    $request->setBody('{"subscription":{"next_billing_at":"2028-12-15"}}'); 
    
    try { 
        $response = $request->send(); 
        echo $response->getBody(); 
    } catch (HttpException $ex) { 
        echo $ex; 
    } 
    

Mein Code im Detail:

public function changeYearlySubscriptionBillingDate(Request $request) 
{ 
    $user = $request->user(); 
    $subscriptionId = $user->subscription->subscription_id; 
    $nextBilling = Carbon::now()->addYear(); 
    $hostname = env('CHARGIFY_HOSTNAME'); 

    $headers = [ 
     'authorization' => 'Basic ANIDIANDIAJIJCQ', 
     'content-type' => 'application/json' 
    ]; 

    $body = ["subscription" => ["next_billing_at" =>[ $nextBilling ]]]; 

    $config = [ 
     'headers' => $headers, 
     'form_param' => $body 
    ]; 

    $client = new Client($config); 

    $res = $client->put("https://$hostname/subscriptions/$subscriptionId.json", 
    ["json" => [ 
    [ "subscription" => 
     [ "next_billing_at" => $nextBilling ] 
    ] 
] 
]); 

    echo $res->getBody(); 
} 
+1

Ich versuche mein Bestes ... – perror

Antwort

0

vielen dank für die Hilfe.

Ich habe an diesem Problem für 2 Tage gearbeitet und es sollte für mich richtig sein. Schließlich ist es ihre API, die mich in die Irre geführt hat.

das einzige, was wir tun müssen, einfach

ändern wird
'body' => "{\"subscription\":{\"next_billing_at\":\"$nextBilling\"}}" 

noch ein paar '\' s im Inneren.

Danke allen für die Hilfe, einen schönen Tag!

1

Die URL, die Sie bauen, ist falsch. Es sollte kein / zwischen $subscription und .json

ändern

$res = $client->put("https://$hostname/subscriptions/$subscriptionId/.json", 

zu

$res = $client->put("https://$hostname/subscriptions/$subscriptionId.json", 

EDIT

Versuch, die Logik Wechsel verputzen wie diese machen nennen.

$headers = [ 
    'authorization' => 'Basic ANIDIANDIAJIJCQ', 
    'content-type' => 'application/json' 
]; 

$body = ["subscription" => ["next_billing_at" =>[ $nextBilling ]]]; 

$client = new Client(); 

$res = $client->put("https://$hostname/subscriptions/$subscriptionId.json", 
    [ 
     'headers' => $headers, 
     'body' => json_encode($body) 
    ] 
); 

echo $res->getBody()->getContents(); 
+0

danke, ich habe die Frage aktualisiert, jetzt funktioniert es einfach nicht (es würde die JSON-Datei zurückgeben, aber das Abonnementdatum überhaupt nicht ändern). Kannst du mich suchen? – zhiyu

+0

versuche meine aktualisierte Antwort – ayip

+0

Leider, obwohl ich die JSON-Datei zurückbekommen habe, ist das Rechnungsdatum immer noch das gleiche. Es könnte das Problem des "Körpers" sein, da der JSON zu uns zurückgeschickt wird, ich kann einfach nicht sagen wie. – zhiyu