PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

callback url ทำอย่างไร ?

callback url ทำอย่างไร ?
สวัสดีครับ วันนี้มีปัญหาอีกแล้ว (มีทุกวันเลย) จากวันก่อนที่เช็ค isset วันนี้ผ่านเรียบร้อยแล้วครับ แต่วันนี้จะเป็นการรับค่าจาก callback url ซึ่งเป็นตามนี้ครับ

$arr = array('SignBeginRequest' => array(
'customerId' => 'xxx',
'sessionId' => $session,
'userId' => $user_id,
'taskType' => 'xxx',
'taskTitle' => $user_id,
'taskMessage' => 'This is test message .',
'logoUrl' => 'Null',
'callbackUrl' => 'https://demo.com/callback',
'pushIfAvailable' => 'true',
'applicationLabel' => $device_system,
'minutesToExpire' => '10'
));

จากนั้นก็เรียกไปที่ server ของเค้าเช่นเดิม ในคู่มือที่เค้าให้มาเค้าบอกว่าจะคืนค่า true หรือ false กลับมาเพื่อเช็คครับ ผมไม่ทราบจริงๆ ว่าจะรับค่านั้นอย่างไรซึ่งจาก url จะเรียกมาที่ https://demo.com/callback ซึ่งใน php ผมเขียนไว้แบบนี้ครับ

public function callback($data){
    var_dump($data) ;
}

ซึ่งปรากฏว่าไม่มีค่าใดๆ ส่งกลับมาเลย ผมไม่ทราบจริงๆ ว่า callback เค้าใช้กันยังไงครับ รบกวนด้วยครับ


โดย:  Aong35258 IP: 171.96.118.xxx วันที่: 25-04-2016 เวลา: 16:44:35

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ


  • ( หรือ สามารถทำการ สมัครสมาชิก และล็อกอิน ด้วย ปุ่ม Log in with Facebook ด้านล่าง )
 ความคิดเห็นที่ 5
ส่วนของ CSRF ถ้ายังไม่ค่อยเข้าใจ ให้เป็น FALSE ไปก่อน
 
$config['csrf_protection'] = FALSE;
 
และก็ใน csrf_exclude_uris ก็ให้เป็นค่าตามเดิม ไม่ต้องเพิ่ม url
 
$config['csrf_exclude_uris'] = array();
 
ส่วนการรับค่า จากที่เขาส่งมาให้ มายัง callback function ถามเขาว่าเขาส่งเป็น
GET หรือ POST มาให้  (*ปกสิส่งเป็น POST)
 
ดังนั้นตามโค้ด 
 
public function callback(){
     if($this->session->userdata('position')==2)
     {
          echo $_GET['callback'];
     }else{
          redirect('index.php','refresh');
     }
}
 
การเช็คค่าที่เขาส่งมาด้วยการตรวจสอบ session จึงไม่ถูก เพราะเขาส่งตัวแปร session มาไม่ได้
$this->session->userdata('position') ค่านี้จึงไม่ใช่ค่าที่เขาจะส่งมาได้
 
การตรวจสอบควรจะเป็น $_POST['xxxx'] หรือ $this->input->post('xxx') แทน
 
เช่น
 
public function callback(){
     if(isset($_POST['position']) && $_POST['position']==2)
     {
          echo "<pre>";
 print_r($_POST);
 echo "</pre>";
     }else{
echo "refirect";
 //         redirect('index.php','refresh');
     }
}
 
เราสามารถทดสอบการรับค่าว่าข้อมูลส่งมาแล้ว error ไหม โดยทำหน้าเพจโล่งอันหนึ่ง
แล้วมีฟอร์มส่งค่าอย่างง่าย ยิงมาที่ callback url นี้เช่น 
 
<form name="form1" method="post" action="https://demo.com/index.php/officer/callback">
  <input type="text" name="position" id="position" value="2">
  <input type="submit" name="button" id="button" value="Submit">
</form>
 
แบบนี้เป็นต้น


โดย:  Ninenik IP: 183.89.95.xxx วันที่: 26-04-2016
 ความคิดเห็นที่ 4
ครับผม ตอนนี้ path ที่ผมส่งไปเป็นแบบนี้ครับ

'callbackUrl' => 'https://demo.com/index.php/officer/callback'

ซึ่งใน model ของผมคือ

class Officer extends CI_Controller {
 
function __construct()
{
parent::__construct();
$this->load->model('officer_model');
$this->load->model('customer_model');
$this->load->model('user_model');
}

public function callback(){
     if($this->session->userdata('position')==2)
     {
          echo $_GET['callback'];
     }else{
          redirect('index.php','refresh');
     }
}
ซึ่งยังคงไม่มีค่าใดๆ ส่งกลับมาครับ หรือผมเข้าใจะไรผิด  

ในส่วนของ $config['csrf_protection'] = TRUE; เมื่อเปิดแล้วไม่สามารถทำงานได้ครับ อันนี้ผมไม่เข้าใจ ที่อ่านเหมือนว่าป้องกันการแอบอ้างใน session รึป่าวครับ แล้วใช้ $config['csrf_exclude_uris'] = array(); เพื่อยกเลิกการตรวจสอบ url แต่ต้องใส่เป็นแบบไหนครับ ใส่ path ลงไปเต็มๆเลย หรือ ใส่เพียง fucntion ของเราครับ


โดย:  Aong35258 IP: 124.122.174.xxx วันที่: 26-04-2016 เวลา: 11:29:45
 ความคิดเห็นที่ 3
<?php
public function callback(){
    $xxxx1 = $this->input->post("ตัวแปรที่เขาส่งมา");
$xxxx2 = $this->input->post("ตัวแปรที่เขาส่งมา");
..........
....
}
?>
 
แล้วเอาค่า $xxxx1 , $xxxx2 .... ไปใช้งาน
 
และถ้าเรามีการเปิดใช้งาน 
 
$config['csrf_protection'] = TRUE;  // กำหนดเป็น TRUE เพื่อเปิดใช้งาน  
 
ในไฟล์ config.php ในโฟลเดอร์ application >  config
 
ให้เพิ่ม exclude_urls เข้าไปในส่วนด้านล่าง
 
$config['csrf_exclude_uris'] = array(); // url ที่ไม่ต้องการตรวจอบ CSRF  
 
เช่น
 
$config['csrf_exclude_uris'] = array(  
    'callback',      

);  
 
แบบนี้้เป็นต้น


>>>  อัพเดท >>> 26-04-2016
------------------------------------------
สมมติเราสร้างไฟล์รับค่าไว้ในโฟลเดอร์ controller ชื่อ Callback.php
 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Callback extends CI_Controller {
	public function index()
	{
		$xxxx1 = $this->input->post("ตัวแปรที่เขาส่งมา");  
		$xxxx2 = $this->input->post("ตัวแปรที่เขาส่งมา");  
	}
}
 
 
url สำหรับรับค่า หรือ callback url ก็จะใช้เป้น 
 
http://www.demo.com/callback
 
และถ้าเราใช้ฟังก์ชั่นอื่น เช่น callback อีกที
 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Callback extends CI_Controller {
	public function index()
	{

	}
	public function callback()
	{
		$xxxx1 = $this->input->post("ตัวแปรที่เขาส่งมา");  
		$xxxx2 = $this->input->post("ตัวแปรที่เขาส่งมา");  
	}	
}
 
url สำหรับรับค่า หรือ callback url ก็จะใช้เป้น 
 
http://www.demo.com/callback/callback


โดย:  Ninenik IP: 14.207.59.xxx วันที่: 26-04-2016
 ความคิดเห็นที่ 2
ครับผม คือผมใช้ codigniter แล้วแบบนี้ผมต้องรับค่าในส่วนไหนครับ model view หรือ controllers ครับ แล้วพอจะมีตัวอย่างให้ดูไหมครับ ผมลองหาอ่านดูแล้ว ก็ยังไม่เข้าใจ รบกวนด้วยครับ

โดย:  Aong35258 IP: 124.122.174.xxx วันที่: 26-04-2016 เวลา: 08:59:48
 ความคิดเห็นที่ 1
callbackUrl ก็คือ หน้าเพจที่เราไว้รับค่า ที่เขาจะส่งมา
ไม่ต้องทำเป็นฟังกืชั่นก็ได้ การรับค่าก็เช็ค isset ค่าตัวแปรที่เขาส่งมา ถ้ามีก็ให้ทำงาน
เหมือนที่เราส่งค่าในเพจปกติ เพียงแต่ เราไม่ได้ส่งค่าผ่นฟอร์มเอง แต่เป็นเขาส่งค่ามา
ประมาณนนั้น

โดย:  Ninenik IP: 183.88.70.xxx วันที่: 25-04-2016