Sample code for 30+ languages & platforms
Visual FoxPro Requires Chilkat v11.0.0+

PayPal: Find captures for a known order

See more PayPal Examples

Read the known order and visit every purchase unit. Extract its captures with their IDs, statuses and amounts. An empty collection means this order has no such resources yet; it says nothing about other orders.

PayPal documentation

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL loResp
LOCAL loErrorInfo
LOCAL loResult
LOCAL lnParsed
LOCAL i
LOCAL j

lnSuccess = 0

*  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.
loHttp = CreateObject('Chilkat.Http')
loHttp.AuthToken = "SANDBOX_ACCESS_TOKEN"
loResp = CreateObject('Chilkat.HttpResponse')

loHttp.SetUrlVar("id","ORDER_ID")

lnSuccess = loHttp.HttpNoBody("GET","https://api-m.sandbox.paypal.com/v2/checkout/orders/{$id}",loResp)
IF (lnSuccess <> 1) THEN
    ? "No HTTP response: " + loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loResp
    CANCEL
ENDIF

IF ((loResp.StatusCode < 200) OR (loResp.StatusCode >= 300)) THEN
    loErrorInfo = CreateObject('Chilkat.JsonObject')
    loErrorInfo.Load(loResp.BodyStr)
    ? "HTTP " + STR(loResp.StatusCode) + " " + loErrorInfo.StringOf("name") + " " + loErrorInfo.StringOf("details[0].issue")
    ? "PayPal debug ID: " + loErrorInfo.StringOf("debug_id")
    RELEASE loHttp
    RELEASE loResp
    RELEASE loErrorInfo
    CANCEL
ENDIF

loResult = CreateObject('Chilkat.JsonObject')
lnParsed = loResult.Load(loResp.BodyStr)
IF (lnParsed <> 1) THEN
    ? "Expected a JSON response; HTTP " + STR(loResp.StatusCode)
    RELEASE loHttp
    RELEASE loResp
    RELEASE loErrorInfo
    RELEASE loResult
    CANCEL
ENDIF

*  A purchase unit may have no captures yet, or more than one.
i = 0
DO WHILE (i < loResult.SizeOfArray("purchase_units"))
    loResult.I = i
    j = 0
    DO WHILE (j < loResult.SizeOfArray("purchase_units[i].payments.captures"))
        loResult.J = j
        ? "Unit: " + loResult.StringOf("purchase_units[i].reference_id") + "  capture: " + loResult.StringOf("purchase_units[i].payments.captures[j].id")
        ? "  " + loResult.StringOf("purchase_units[i].payments.captures[j].status") + "  " + loResult.StringOf("purchase_units[i].payments.captures[j].amount.value") + " " + loResult.StringOf("purchase_units[i].payments.captures[j].amount.currency_code")
        j = j + 1
    ENDDO
    i = i + 1
ENDDO

RELEASE loHttp
RELEASE loResp
RELEASE loErrorInfo
RELEASE loResult