Fix SMS delivery receipt functionality #394

This commit is contained in:
Kendrick Chan 2020-05-03 22:50:56 +08:00
parent 434cedf206
commit d189b8eb18
6 changed files with 109 additions and 1 deletions

View file

@ -30,6 +30,10 @@ security:
pattern: ^\/api\/
security: false
sms:
pattern: ^/sms\/
security: false
rider_api:
pattern: ^\/rapi\/
security: false

6
config/routes/sms.yaml Normal file
View file

@ -0,0 +1,6 @@
# sms handling - rising tide
sms_delivery_receipt:
path: /sms/delivery_receipt
controller: App\Controller\SMSController::deliveryReceipt
methods: [POST]

View file

@ -74,7 +74,7 @@ services:
$pass: "%env(RT_PASS)%"
$usage_type: "%env(RT_USAGE_TYPE)%"
$shortcode: "%env(RT_SHORTCODE)%"
$dr_url: ""
$dr_url: "https://resqapi.jankstudio.com/sms/delivery_receipt"
App\Service\MQTTClient:
arguments:

View file

@ -0,0 +1,71 @@
<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use App\Entity\SMSMessage;
use DateTime;
class SMSController extends Controller
{
public function deliveryReceipt(Request $req, EntityManagerInterface $em)
{
$content = $req->getContent();
error_log($content);
$data = json_decode($content, true);
error_log(print_r($data, true));
// data has id?
if (!isset($data['id']))
{
error_log('SMSDR: no id sent');
$resp = new Response();
$resp->setStatusCode(400);
return $resp;
}
// check structure
if (!isset($data['delivered']) ||
!isset($data['reason_code']) ||
!isset($data['reason_description'])
)
{
error_log('SMSDR: bad data structure');
$resp = new Response();
$resp->setStatusCode(400);
return $resp;
}
// find sms
$sms = $em->getRepository(SMSMessage::class)->find($data['id']);
if ($sms == null)
{
error_log('SMSDR: no sms found');
$resp = new Response();
$resp->setStatusCode(202);
return $resp;
}
$sms->setReasonCode($data['reason_code']);
if ($data['delivered'])
$sms->setStatus('delivered');
else
$sms->setStatus('not_delivered');
$em->flush();
$resp = new Response();
$resp->setStatusCode(202);
return $resp;
}
}

View file

@ -48,6 +48,11 @@ class SMSMessage
*/
protected $status;
/**
* @ORM\Column(type="integer", length=5)
*/
protected $reason_code;
public function __construct()
{
@ -57,6 +62,13 @@ class SMSMessage
$this->to = '';
$this->message = '';
$this->status = 'created';
$this->reason_code = 0;
// status are:
// created
// sent
// delivered
// not_delivered
}
public function getID()
@ -123,4 +135,15 @@ class SMSMessage
{
return $this->status;
}
public function setReasonCode($code)
{
$this->reason_code = $code;
return $this;
}
public function getReasonCode()
{
return $this->reason_code;
}
}

View file

@ -51,6 +51,7 @@ class RisingTideGateway
$date_string = $date->format('Y-m-d') . 'T' . $date->format('H:m:s');
$data = [
'id' => $sms->getID(),
'from' => $this->shortcode,
'from_alias' => $mask,
'to' => $mobile_num,
@ -58,7 +59,10 @@ class RisingTideGateway
'body' => $message,
'date' => $date_string,
'usagetype' => $this->usage_type,
'delivery_receipt_url' => $dr_url,
];
error_log(print_r($data, true));
$data_json = json_encode($data);
$userpwd = $this->user . ':' . $this->pass;