checkout.php Error ครับผม

omise-js

#1

พอดีต้องการใช้ js + php ผมต้องแก้ที่ไหนหรอครับ

ทดสอบจากที่นี่ครับ
ตอนแรกใช้ Omise.js มาครับ ต้องการจ่ายผ่าน Alipay ครับ
https://packandship.net/test/omise.js/

erorr ตามนี้ครับ

Fatal error: Uncaught OmiseNotFoundException: token was not found in /home/packand6/public_html/test/omise.js/lib/omise/exception/OmiseExceptions.php:30 Stack trace: #0 /home/packand6/public_html/test/omise.js/lib/omise/res/OmiseApiResource.php(156): OmiseException::getInstance(Array) #1 /home/packand6/public_html/test/omise.js/lib/omise/res/OmiseApiResource.php(78): OmiseApiResource->execute(‘https://api.omi…’, ‘POST’, ‘skey_test_5amy2…’, Array) #2 /home/packand6/public_html/test/omise.js/lib/omise/OmiseCharge.php(78): OmiseApiResource::g_create(‘OmiseCharge’, ‘https://api.omi…’, Array, NULL, NULL) #3 /home/packand6/public_html/test/omise.js/checkout.php(13): OmiseCharge::create(Array) #4 {main} thrown in /home/packand6/public_html/test/omise.js/lib/omise/exception/OmiseExceptions.php on line 30


#2

สวัสดีครับ
ผมรบกวนขอดู code ตัวอย่างที่คุณ @omise-treelapat กำลัง implement อยู่ได้ไหมครับ


#3
<?php

require_once dirname(__FILE__).'/lib/Omise.php';
define('OMISE_API_VERSION', '2015-11-17');
// define('OMISE_PUBLIC_KEY', 'PUBLIC_KEY');
// define('OMISE_SECRET_KEY', 'SECRET_KEY');
define('OMISE_PUBLIC_KEY', 'PUBLIC_KEY');
define('OMISE_SECRET_KEY', 'SECRET_KEY');

$charge = OmiseCharge::create(array(
  'amount' => 10025,
  'currency' => 'thb',
  'return_uri' => 'https://packandship.net/test/omise.js/checkout.php',
  'source' => 'src_test_59wbyjr7jz44d8nzcd6'
));


if ($charge['status'] == 'successful') {
  echo 'Success';
} else {
  echo 'Fail';
}

print('<pre>');
print_r($charge);
print('</pre>');

#4

งงว่าตรงนี้มายังไงหรอครับ ผมดูจาก https://www.omise.co/th/charges-api แต่ไม่ค่อยแน่ใจ


#5

secret key สามารถดูได้จากใน Omise Dashboard เลยครับ
คลิกลิงก์ https://dashboard.omise.co จากนั้นเลื่อนหน้าจอลงมา ที่เมนูด้านซ้ายมือ จะเจอเมนูชื่อว่า Keys

โดยตัว public และ secret key นี้ จะใช้ในการยืนยันตัวตนของ Omise Account นั้นๆ ในแต่ละ request ที่ส่งมาที่ Omise API ครับ


#6
$charge = OmiseCharge::create(array(
  'amount' => 10025,
  'currency' => 'thb',
  'return_uri' => 'https://packandship.net/test/omise.js/checkout.php',
  'source' => 'source'
));

แก้แล้วนะครับแต่ก็ยัง Error เหมือนเดิมครับ

#7
Fatal error: Uncaught OmiseNotFoundException: card was not found in /home/packand6/public_html/test/omise.js/lib/omise/exception/OmiseExceptions.php:30 Stack trace: #0 /home/packand6/public_html/test/omise.js/lib/omise/res/OmiseApiResource.php(156): OmiseException::getInstance(Array) #1 /home/packand6/public_html/test/omise.js/lib/omise/res/OmiseApiResource.php(78): OmiseApiResource->execute('https://api.omi...', 'POST', 'skey_test_5amy2...', Array) #2 /home/packand6/public_html/test/omise.js/lib/omise/OmiseCharge.php(78): OmiseApiResource::g_create('OmiseCharge', 'https://api.omi...', Array, NULL, NULL) #3 /home/packand6/public_html/test/omise.js/checkout.php(11): OmiseCharge::create(Array) #4 {main} thrown in /home/packand6/public_html/test/omise.js/lib/omise/exception/OmiseExceptions.php on line 30

#8

@omise-treelapat ขอโทษด้วยครับ! ผมดูผิด เห็นโค้ดชุดด้านบนเลยคิดว่ากำลังติดปัญหาในส่วนของ secret key :bowing_woman:

ขออนุญาตแก้คำตอบนะครับ :bowing_woman:
ในส่วนของการสร้าง charge เราจะใช้โค้ดชุดนี้ในการสร้าง charge ถูกต้องแล้วครับ

$charge = OmiseCharge::create(array(
  'amount' => 10025,
  'currency' => 'thb',
  'return_uri' => 'https://packandship.net/test/omise.js/checkout.php',
  'source' => 'src_test_59wbyjr7jz44d8nzcd6'
));

ในการสร้าง charge จะแบ่งออกเป็น 2 ส่วนด้วยกันครับ คือ

  1. ส่วนของ Front-End หรือเว็บไซต์ จะต้องสร้าง Source Object ขึ้นมา โดยใช้ Omise.js จากนั้นจึงส่งค่า Source ID ไปยัง Back-End ครับ

  2. ส่วนของ Back-End หรือ PHP Server
    รับค่า $_POST ที่ส่งมาจากหน้าเว็บไซต์ จากนั้นจึงนำ Source ID ไปสร้าง charge ต่อไปครับ

สามารถตรวจสอบเอกสารด้านล่างนี้ประกอบไปด้วยก็ได้ครับ

หรือจะลองดาวน์โหลดโค้ดตัวอย่างนี้มาลองรันดูก็ได้ครับ


#9

งง นิดนึงรบกวนหน่อยนะครับ คือผมต้องการใช้ Alipay ครับผม

$charge = OmiseCharge::create(array(
  'amount' => 10025,
  'currency' => 'thb',
  'return_uri' => 'https://packandship.net/test/omise.js/checkout.php',
  'source' => $_POST['omise_token']
));

ชุดคือ Charge ของ Alipay ตามที่ไปดู Doc มาครับ

ในส่วนของ source มันต้องรับค่ามาจากตัว form js และ post ค่ามาใช่ไหมครับ ตาม Code ด้านบนหรือต้องทำยังไงหรอครับ


#10

ถ้าเป็นในส่วนของ Alipay จะเป็นขั้นตอนเหมือนกันกับด้านบนเลยครับ
แต่ในกรณีของ Alipay จะใช้เป็น Source แทน Omise token

ยกตัวอย่างเช่น คุณ @omise-treelapat สามารถลองรันโค้ดชุดด้านล่างนี้ เพื่อสร้าง Alipay Charge ได้เลยครับ

<form class="checkout-form" name="checkoutForm" method="POST" action="">
  <script type="text/javascript" src="https://cdn.omise.co/omise.js"
          data-key="public key ของคุณ @omise-treelapat "
          data-frame-label="Merchant site name"
          data-frame-description="Merchant site description"
          data-default-payment-method="alipay"
          data-amount="10025"
          data-currency="thb"
          data-button-label="Pay via Alipay">
  </script>
</form>

<?php
if ($_POST) {
    $charge = OmiseCharge::create(array(
        'amount'     => 10025,
        'currency'   => 'thb',
        'return_uri' => 'https://packandship.net/test/omise.js/checkout.php',
        'source'     => $_POST['omiseSource']
    ));
}
?>

จากโค้ดชุดด้านบน คือการเรียกใช้งาน Omise.js prebuilt-form เพื่อทำการสร้าง Source Object
จากนั้นตัว Omise.js จะ submit ไปยัง server side (ซึ่งก็คือ url ที่กำหนดไว้ใน action=""

จากนั้นจึงเขียน PHP script ให้รับค่า omiseSource จาก $_POST มา เพื่อนำมาสร้าง Charge ครับ


#12

ได้แล้วครับ ขอบคุณมากครับ