WSON_remote_post () के माध्यम से JSON स्ट्रिंग भेजना


13

मैं एक mailchimp एकीकरण का निर्माण कर रहा हूं और उन्हें JSON कोड के साथ एक POST कॉल की आवश्यकता है।

नहीं, मैं इस कोड का उपयोग कर रहा हूं जो वास्तव में काम करता है :

$data = wp_remote_post($url, array(
    'headers'   => array('Content-Type' => 'application/json; charset=utf-8'),
    'body'      => json_encode($array_with_parameters),
    'method'    => 'POST'
));

लेकिन, यह एक PHP चेतावनी देता है

चेतावनी: http_build_query (): पैरामीटर 1 एरे या ऑब्जेक्ट होने की उम्मीद है। गलत मान दिया गया ../wp-includes/Requests/Transport/cURL.php लाइन 507 पर

इसे कैसे उतारा जाए?

मैंने 'बॉडी' इंडेक्स में प्लेन ऐरे का उपयोग करने की कोशिश की है, लेकिन MailChimp ने JSON पार्सिंग त्रुटि दी है।


1
क्या आपने इस पैच को कोर पर लागू किया है? core.trac.wordpress.org/ticket/37700
ओटो

दिलचस्प। एक वाणिज्यिक प्लगइन है, तो किसी भी WP स्थापना पर काम करना चाहिए। लेकिन चूंकि यह WP बग प्रतीत होता है, मेरे लिए ठीक है। बहुत धन्यवाद!
एक कोडर

जवाबों:


16

data_formatअपने अनुरोध में पैरामीटर सेट करने का प्रयास करें जैसे:

$data = wp_remote_post($url, array(
    'headers'     => array('Content-Type' => 'application/json; charset=utf-8'),
    'body'        => json_encode($array_with_parameters),
    'method'      => 'POST',
    'data_format' => 'body',
));

ऐसा लगता है कि प्रारूप डिफ़ॉल्ट हो सकता है query, जिस स्थिति में वर्डप्रेस डेटा का उपयोग करने का प्रयास करता है http_build_query, जो आपको समस्या दे रहा है क्योंकि आप पहले से ही एक स्ट्रिंग के रूप में शरीर को प्रारूपित कर रहे हैं। यहाँ प्रासंगिक जाँच है wp-includes/class-http.php:

if (!empty($data)) {
    $data_format = $options['data_format'];

    if ($data_format === 'query') {
        $url = self::format_get($url, $data);
        $data = '';
    }
    elseif (!is_string($data)) {
        $data = http_build_query($data, null, '&');
    }
}

चूंकि आपकी त्रुटि 507 की लाइन से आ रही है wp-includes/Requests/Transport/cURL.php, हम देख सकते हैं कि यह रूट कॉल है http_build_query:

protected static function format_get($url, $data) {
    if (!empty($data)) {
        $url_parts = parse_url($url);
        if (empty($url_parts['query'])) {
            $query = $url_parts['query'] = '';
        }
        else {
            $query = $url_parts['query'];
        }

        $query .= '&' . http_build_query($data, null, '&');
        $query = trim($query, '&');

        if (empty($url_parts['query'])) {
            $url .= '?' . $query;
        }
        else {
            $url = str_replace($url_parts['query'], $query, $url);
        }
    }
    return $url;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.