使用 PHP 发布到 Shopify

Posting to Shopify using PHP

我正在尝试从 PHP 页面 post 到 Shopify 以表明订单商品已完成。我一定没有正确地这样做,因为我一直得到一个空结果。我在一个被取消的测试订单上执行此操作,但我希望如果那是问题所在,我至少会得到某种非空响应。这是我的代码:

$API_KEY = 'my-api-key';
$SECRET = 'my-shared-secret';
$PASS = 'my-shopify-password';
$STORE_URL = 'mydomain.myshopify.com';
$ITEM_ID = 'my-item-id';
$ORDER_ID = 'my-order-number';
$TRACKING_NUMBER = '12345';
$TRACKING_URL = 'http:\/\/test.com\/testurl';

$baseUrl = 'https://'.$API_KEY.':'.$PASS.'@'.$STORE_URL.
           '/admin/orders/'.$ORDER_ID.'/fulfillments.json';

$data = array('fulfillment' =>
                array(
                    'tracking_number' => $TRACKING_NUMBER,
                    'tracking_company' => 'USPS',
                    'tracking_url' => $TRACKING_URL,
                    'line_items' =>
                        array(
                            'id'=>$ITEM_ID,
                            ),
                ),
            );
$session = curl_init( $baseUrl );
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($session, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($session,CURLOPT_SSL_VERIFYPEER,false);

$response = curl_exec($session);
curl_close($session);

$json = json_decode( $response, true );

var_dump($json);

您在 POST 部分发送 json,您确定这是您真正想要做的吗? post数据应该是这样的,发送data1=test1&data2=test2source

<?php
$API_KEY = 'my-api-key';
$SECRET = 'my-shared-secret';
$PASS = 'my-shopify-password';
$STORE_URL = 'mydomain.myshopify.com';
$ITEM_ID = 'my-item-id';
$ORDER_ID = 'my-order-number';
$TRACKING_NUMBER = '12345';
$TRACKING_URL = 'http:\/\/test.com\/testurl';

$baseUrl = 'https://'.$API_KEY.':'.$PASS.'@'.$STORE_URL.'/admin/orders/'.$ORDER_ID.'/fulfillments.json';

$fields = array(
        'lname' => urlencode($last_name),
        'fname' => urlencode($first_name),
        'title' => urlencode($title),
        'company' => urlencode($institution),
        'age' => urlencode($age),
        'email' => urlencode($email),
        'phone' => urlencode($phone)
);

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($session, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($session, CURLOPT_URL, $baseUrl);
curl_setopt($session, CURLOPT_POST, count($fields));
curl_setopt($session, CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);


var_dump($result);
//close connection
curl_close($ch);
?>

如果您真的想通过 POST 字段发送 JSON,可能您缺少数据的长度:source

curl_setopt($, , CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data))                                                                       
);                  

你不应该改用 complete.json 吗???我可能误会了,但听起来您是在尝试完成待完成的任务。

/admin/orders/#{id}/fulfillments/#{id}/complete.json

https://docs.shopify.com/api/fulfillment#complete

我发现了问题。 Shopify 要求订单项有一个额外的数组,所以不要这样:

'line_items' =>
                    array(
                        'id'=>$ITEM_ID,
                        )

应该是这样的:

'line_items' =>
                    array(
                       array(
                           'id'=>$ITEM_ID,
                        ) 
                    )