2016-08-09 1 views
2

다른 기능에서 발생하는 거래의 label_url 변수를 사용.칠보 : 나는 날이를 알아낼 수 있습니다 노드에서 칠보의 API 작업은 경험있는 사람을 희망하고있다

내 최종 목표는 각도 형태의 프론트 엔드의 버튼을 누르면 생성 된 선적 트랜잭션을 가지고 있고, 사용자 정의 PDF를 생성하는 트랜잭션의 라벨 URL을 사용하는 것입니다. 생성 된 레이블 URL을 PDF 템플릿으로 푸시하는 것을 제외하고는 모두 작동합니다.

첫째, 나는 익스프레스 POST 경로로 Shippo's single click label creation example을 붙여. 그것은 잘 처리되어 최근 거래 목록을 찾고 가장 최근의 거래를보기 위해 Shippo의 API에 ping을해서 체크 아웃 할 수있는 트랜잭션을 생성합니다.

다음, 나는 lines 102-111 of this code example를 추가하고 그와 함께 instalabel 코드에서 일반 오류 메시지 발생기를 교체, 그래서 내 현재는 칠보 트랜잭션 논리는 다음과 같습니다 app.js :

shippo.transaction.create({ 
    "shipment": shipment, 
    "carrier_account": "xxxxxxxxxxxxxxxxxxxxxx", 
    "servicelevel_token": "ups_ground", 
    "label_file_type": "PNG" 
},function(transaction, err){ 
      console.log("transaction : %s", JSON.stringify(transaction, null, 4)); 
      // print label_url and tracking_number 
      if(transaction.object_status == "SUCCESS") { 
       console.log("Label URL: %s", transaction.label_url); 
       console.log("Tracking Number: %s", transaction.tracking_number); 
       exports.label_url = transaction.label_url; 
       exports.tracking_number = transaction.tracking_number; 
      }else{ 
       //Deal with an error with the transaction 
       console.log("Message: %s", transaction.messages); 
      } 

    }); 

내가 잡아 필요 방금 만든 및 다른 함수에서 사용 된 트랜잭션에 대한 & TRACKING_NUMBER을 label_url,하지만 난 지금까지 해봤 다 다음과 같은 오류로 끝날 것 같다 :

/src/app.js:88 
    if(transaction.object_status == "SUCCESS") { 
       ^

TypeError: Cannot read property 'object_status' of null 
,

배송 라벨을 작성하는 기능이 Shippo가 답장을 보내지 않아서 다른 기능에서 사용할 수 없기 때문에 이것을 추측하고 있습니다 ... 정확합니까, 아니면 짖고 있습니까? 틀린 나무가 여기 있니? 참고로, 이것은 칠보의 응답이]처럼 보이도록되어있는 것이다 :

{ 
    "object_state":"VALID", 
    "object_status":"SUCCESS", 
    "object_created":"2014-07-25T02:09:34.422Z", 
    "object_updated":"2014-07-25T02:09:34.513Z", 
    "object_id":"ef8808606f4241ee848aa5990a09933c", 
    "object_owner":"[email protected]", 
    "was_test":true, 
    "rate":"ee81fab0372e419ab52245c8952ccaeb", 
    "tracking_number":"tracking_number_goes_here", 
    "tracking_status":null, 
    "tracking_url_provider":"", 
    "label_url":"label_url_goes_here", 
    "commercial_invoice_url": "", 
    "messages":[ 

    ], 
    "customs_note":"", 
    "submission_note":"", 
    "metadata":"" 
} 

나는 shippo.transaction.create 기능 자체가 외부에서이 응답의 값을 사용하기 위해 무엇을 할 수 있는가?

읽어 주셔서 감사합니다. 당신이 shippo.transaction.create에 사용되는 콜백에 전달하는

답변

4

매개 변수는 그 주입 PARAMS는 반전했다. (err, transaction)이 아닌 (transaction, err)이어야합니다. 또는 .then()에 체인을 연결하고 (transaction) 만 걸리는 콜백을 전달하고 transaction.messages에있는 모든 오류 메시지에 액세스 할 수 있습니다. 다음은

는이 글을 쓰는 시점에서 shippo-node-wrapper의 최신 버전과 함께 작동하는 예이다.

var shippo = require('./lib/shippo')('<API KEY>'); 

var addressFrom = { 
    "object_purpose":"PURCHASE", 
    "name":"Ms Hippo", 
    "company":"Shippo", 
    "street1":"215 Clayton St.", 
    "city":"San Francisco", 
    "state":"CA", 
    "zip":"94117", 
    "country":"US", //iso2 country code 
    "phone":"+1 555 341 9393", 
    "email":"[email protected]", 
}; 

// example address_to object dict 
var addressTo = { 
    "object_purpose":"PURCHASE", 
    "name":"Mr Hippo", 
    "company":"Happy Hippo", 
    "street1":"965 Mission St", 
    "street2":"Suite 425", 
    "city":"San Francisco", 
    "state":"CA", 
    "zip":"94103", 
    "country":"US", //iso2 country code 
    "phone":"949-123-4567", 
    "email":"[email protected]", 
    "metadata" : "Hippo T-Shirt Order #1043" 
}; 

// parcel object dict 
var parcel = { 
    "length":"5", 
    "width":"5", 
    "height":"5", 
    "distance_unit":"in", 
    "weight":"2", 
    "mass_unit":"lb", 
}; 

var shipment = { 
    "object_purpose": "PURCHASE", 
    "address_from": addressFrom, 
    "address_to": addressTo, 
    "parcel": parcel, 
    "async": false 
}; 

shippo.transaction.create({ 
    "shipment": shipment, 
     "carrier_account": "07280f4f96f34cc8b75e593c4835dc38", 
     "servicelevel_token": "usps_priority", 
     "label_file_type": "PNG" 
}, function (err, transaction) { 
    console.log("transaction : %s", JSON.stringify(transaction, null, 4)); 
    // print label_url and tracking_number 
    if (transaction.object_status == "SUCCESS") { 
     console.log("Label URL: %s", transaction.label_url); 
     console.log("Tracking Number: %s", transaction.tracking_number); 
    } else { 
     //Deal with an error with the transaction 
     console.log("Message: %s", transaction.messages); 
    } 
}); 

// OR 

shippo.transaction.create({ 
    "shipment": shipment, 
     "carrier_account": "07280f4f96f34cc8b75e593c4835dc38", 
     "servicelevel_token": "usps_priority", 
     "label_file_type": "PNG" 
}).then(function (transaction) { 
    console.log("transaction : %s", JSON.stringify(transaction, null, 4)); 
    // print label_url and tracking_number 
    if (transaction.object_status == "SUCCESS") { 
     console.log("Label URL: %s", transaction.label_url); 
     console.log("Tracking Number: %s", transaction.tracking_number); 
    } else { 
     //Deal with an error with the transaction 
     console.log("Message: %s", transaction.messages); 
    } 
}); 
+0

삽입 된 매개 변수의 순서를 바꾸는 것이 트릭이었습니다.이를 지적하고 예제를 제공해 주셔서 감사합니다! – wingmatt