Sample code for 30+ languages & platforms
C# Requires Chilkat v11.0.0+

PayPal: Submit proof of fulfillment for a dispute

See more PayPal Examples

Inspect the actions and evidence requested for a selected dispute. When PayPal requests proof of fulfillment from the seller, attach the matching carrier receipt PDF with tracking details in a multipart request. Replace the file and tracking number with those for this case.

PayPal documentation

Chilkat C# Downloads

C#
bool success = false;

//  See Unlock Chilkat before making requests.
//  For the merchant's internal backoffice application. Load the sandbox token
//  from the merchant's credential store. Keep it out of publicly distributed apps.
//  See Get a PayPal access token.
Chilkat.Http http = new Chilkat.Http();
http.AuthToken = "SANDBOX_ACCESS_TOKEN";
Chilkat.HttpResponse resp = new Chilkat.HttpResponse();

http.SetUrlVar("id","DISPUTE_ID");

success = http.HttpNoBody("GET","https://api-m.sandbox.paypal.com/v1/customer/disputes/{$id}",resp);
if (success != true) {
    Debug.WriteLine("No HTTP response: " + http.LastErrorText);
    return;
}

if ((resp.StatusCode < 200) || (resp.StatusCode >= 300)) {
    Chilkat.JsonObject errorInfo = new Chilkat.JsonObject();
    errorInfo.Load(resp.BodyStr);
    Debug.WriteLine("HTTP " + Convert.ToString(resp.StatusCode) + " " + errorInfo.StringOf("name") + " " + errorInfo.StringOf("details[0].issue"));
    Debug.WriteLine("PayPal debug ID: " + errorInfo.StringOf("debug_id"));
    return;
}

Chilkat.JsonObject result = new Chilkat.JsonObject();
bool parsedResult = result.Load(resp.BodyStr);
if (parsedResult != true) {
    Debug.WriteLine("Expected a JSON response; HTTP " + Convert.ToString(resp.StatusCode));
    return;
}

bool canSubmit = false;
int linkIndex = 0;
while ((linkIndex < result.SizeOfArray("links"))) {
    result.I = linkIndex;
    if (result.StringOfEquals("links[i].rel","provide_evidence",true) == true) {
        canSubmit = true;
    }

    linkIndex = linkIndex + 1;
}

bool requested = false;
int i = 0;
while ((i < result.SizeOfArray("evidences"))) {
    result.I = i;
    if ((result.StringOfEquals("evidences[i].evidence_type","PROOF_OF_FULFILLMENT",true) == true) && (result.StringOfEquals("evidences[i].source","REQUESTED_FROM_SELLER",true) == true)) {
        requested = true;
    }

    i = i + 1;
}

if ((canSubmit != true) || (requested != true)) {
    Debug.WriteLine("PayPal is not requesting seller fulfillment evidence for this case.");
    return;
}

Chilkat.JsonObject body = new Chilkat.JsonObject();
body.UpdateString("evidences[0].evidence_type","PROOF_OF_FULFILLMENT");
body.UpdateString("evidences[0].evidence_info.tracking_info[0].carrier_name","FEDEX");
body.UpdateString("evidences[0].evidence_info.tracking_info[0].tracking_number","123456789012");
body.UpdateString("evidences[0].notes","The attached carrier receipt corresponds to this shipment.");
Chilkat.HttpRequest upload = new Chilkat.HttpRequest();
upload.HttpVerb = "POST";
upload.ContentType = "multipart/form-data";
success = upload.AddStringForUpload2("input","",body.Emit(),"utf-8","application/json");
if (success != true) {
    Debug.WriteLine(upload.LastErrorText);
    return;
}

success = upload.AddFileForUpload2("file1","carrier-receipt.pdf","application/pdf");
if (success != true) {
    Debug.WriteLine(upload.LastErrorText);
    return;
}

success = http.HttpReq("https://api-m.sandbox.paypal.com/v1/customer/disputes/{$id}/provide-evidence",upload,resp);
if (success != true) {
    Debug.WriteLine("No HTTP response: " + http.LastErrorText);
    return;
}

if ((resp.StatusCode < 200) || (resp.StatusCode >= 300)) {
    Chilkat.JsonObject submitError = new Chilkat.JsonObject();
    submitError.Load(resp.BodyStr);
    Debug.WriteLine("HTTP " + Convert.ToString(resp.StatusCode) + " " + submitError.StringOf("name") + " " + submitError.StringOf("details[0].issue"));
    Debug.WriteLine("PayPal debug ID: " + submitError.StringOf("debug_id"));
    return;
}

Debug.WriteLine("PayPal accepted the evidence.");