I'm working with Paymill as my payment provider and i'm getting stuck with the Webhooks.
Currently i recieve the webhook by email as per the below but I want to pick this up in a page instead and post it to my database. I know how to do this bit, however i'm unsure how i pick up to pick up the individual posts.
{
"event_type":"transaction.created",
"event_resource":{
"id":"tran_9x2x8xex5x7xexex0x8x9xexexbx",
"amount":"9980",
"origin_amount":9980,
"status":"open",
"description":"9xax1x7x5x8x2xaxaxcx4x5xfx8x2x2x",
"livemode":true,
"refunds":null,
"currency":"GBP",
"created_at":1375307922,
"updated_at":1375307922,
"response_code":10001,
"short_id":null,
"is_fraud":false,
"invoices":[
],
"app_id":null,
"fees":[
],
"payment":{
"id":"pay_7xdxex9xfxcx6x3x9x5x7xcx",
"type":"creditcard",
"client":"client_2x2xex0x2x4xx3bx3x6x",
"card_type":"mastercard",
"country":null,
"expire_month":"10",
"expire_year":"2015",
"card_holder":"XXX XXXXXX",
"last4":"8XX8",
"created_at":1375307921,
"updated_at":1375307922,
"app_id":null
},
"client":{
"id":"client_2x2xex0x2x4xfx3x3x6x",
"email":null,
"description":null,
"created_at":1375307922,
"updated_at":1375307922,
"app_id":null,
"payment":[
],
"subscription":null
},
"preauthorization":null
},
"created_at":1375307922,
"app_id":null
}
So how do I pull out using php the event_resource id?
Normally i would just do <?php $_POST['event_resource]; ?>
That looks like a JSON object, so use json_decode()
to convert it into a nice PHP object.
$reply = json_decode( $data_from_hook );
SAMPLE CODE:
<?php
$t = '{
"event_type":"transaction.created",
"event_resource":{
"id":"tran_9x2x8xex5x7xexex0x8x9xexexbx",
"amount":"9980",
"origin_amount":9980,
"status":"open",
"description":"9xax1x7x5x8x2xaxaxcx4x5xfx8x2x2x",
"livemode":true,
"refunds":null,
"currency":"GBP",
"created_at":1375307922,
"updated_at":1375307922,
"response_code":10001,
"short_id":null,
"is_fraud":false,
"invoices":[
],
"app_id":null,
"fees":[
],
"payment":{
"id":"pay_7xdxex9xfxcx6x3x9x5x7xcx",
"type":"creditcard",
"client":"client_2x2xex0x2x4xx3bx3x6x",
"card_type":"mastercard",
"country":null,
"expire_month":"10",
"expire_year":"2015",
"card_holder":"XXX XXXXXX",
"last4":"8XX8",
"created_at":1375307921,
"updated_at":1375307922,
"app_id":null
},
"client":{
"id":"client_2x2xex0x2x4xfx3x3x6x",
"email":null,
"description":null,
"created_at":1375307922,
"updated_at":1375307922,
"app_id":null,
"payment":[
],
"subscription":null
},
"preauthorization":null
},
"created_at":1375307922,
"app_id":null
}';
echo PHP_EOL;
$u = json_decode($t);
print_r( $u );
echo 'Event Rosource ID = ' . $u->event_resource->id;
RESULTS:
stdClass Object
(
[event_type] => transaction.created
[event_resource] => stdClass Object
(
[id] => tran_9x2x8xex5x7xexex0x8x9xexexbx
[amount] => 9980
[origin_amount] => 9980
[status] => open
[description] => 9xax1x7x5x8x2xaxaxcx4x5xfx8x2x2x
[livemode] => 1
[refunds] =>
[currency] => GBP
[created_at] => 1375307922
[updated_at] => 1375307922
[response_code] => 10001
[short_id] =>
[is_fraud] =>
[invoices] => Array
(
)
[app_id] =>
[fees] => Array
(
)
[payment] => stdClass Object
(
[id] => pay_7xdxex9xfxcx6x3x9x5x7xcx
[type] => creditcard
[client] => client_2x2xex0x2x4xx3bx3x6x
[card_type] => mastercard
[country] =>
[expire_month] => 10
[expire_year] => 2015
[card_holder] => XXX XXXXXX
[last4] => 8XX8
[created_at] => 1375307921
[updated_at] => 1375307922
[app_id] =>
)
[client] => stdClass Object
(
[id] => client_2x2xex0x2x4xfx3x3x6x
[email] =>
[description] =>
[created_at] => 1375307922
[updated_at] => 1375307922
[app_id] =>
[payment] => Array
(
)
[subscription] =>
)
[preauthorization] =>
)
[created_at] => 1375307922
[app_id] =>
)
Event Rosource ID = tran_9x2x8xex5x7xexex0x8x9xexexbx
This will get the you the json:
$body = @file_get_contents('php://input');
$json = json_decode($body, true);