เปิดเก๊ะคิดเงิน (Cash Drawer) ผ่านแลนด้วย PHP

จริงๆก่อนที่จะมาเขียนโปรแกรมหน้าร้าน (POS: Point-of-sale) เองก็มพยายามที่จะไปซื้อโปรแกรมคนอื่นเหมือนกันแต่หลายๆเจ้าที่ติดต่อไปก็ไม่ติดต่อกลับมาอาจด้วยเหตุผลที่ว่าร้านเราเล็กเกินไป (ที่คิดแบบนั้นเพราะมีบริษัทนึงแจ้งเรามาแบบนั้น เขาแจ้งว่าไม่คุ้มที่จะให้เซลล์เดินทางไป​) งั้นเอาว่ะ เขียนเองก็ได้

โปรแกรมนี่เหมือนอัจฉริยะข้ามคืนครับ โปรแกรมยังเขียนไม่เสร็จเลย พรุ่งนี้ต้องใช้แล้ว ก็เอาไปใช้ทั้งๆอย่างนั้นเลย ช่วงอาทิตย์แรกๆนี่นั่งแก้โค้ตตรงนั้นเลย

จริงๆได้เขียน POS ด้วยตัวเองก็สนุกไปอีกแบบเหมือนกันได้ลองอะไรใหม่ๆบ้าง

เรื่องที่ใหม่มากตอนนั้นคือเรื่องการเปิดเก๊ะคิดเงิน (Cash Drawer) หรือเก๊ะเก็บเงิน คือเราไม่เข้าใจการทำงานมันจริงๆ เพราะเป็นเรื่องที่ใหม่มากๆของเรา

ตอนนั้นการแก้ปัญหาตอนนั้นคือ “สั่งให้เครื่องพิมพ์เป็นผู้เปิดเก๊ะคิดเงินหลังจากที่พิมพ์เสร็จ” (ในตอนนั้นใช้เครื่องพิมพ์ของ XPrinter N200N มั้ง เป็น USB)

ความวิกฤติก็คือ ไม่ว่าจะพิมพ์น้อยหรือเยอะแค่ไหนเครื่องพิมพ์ก็จะสั่งให้เปิดเก๊ะเสมอ (เอ้าก็เป็นคนสั่งเอง)

เราสามารถสั่งให้เรื่องพิมพ์ทำเช่นนั้นได้โดยการ คลิกขวาที่เครื่องพิมพ์เลือก properties แล้วเลือก Dervice Settings แล้วส่วนของ Cash Select ก็เลือกเอาว่าจะให้ทำยังไง (เปิดเก๊ะก่อนพิมพ์ หรือ พิมพ์ให้เสร็จก่อนค่อยเปิดเก๊ะ) อันนี้แล้วแต่ความสะดวกของแต่ละการใช้งาน

ทีนี่ตอนใช้งานจริงมันไม่ใช่ไง คือจะให้เปิดเก๊ะตลอดเวลาที่กระดาษออกมันก็ไม่ไหวป่ะก็เลยพยายามหาทางแก้ไขไปเปิดในอินเทอร์เนตก็มีแนะนำให้สร้าง hotkey สำหรับเปิดเก๊ะขึ้นมา ซึ่งเราว่ามันไม่ใช่

จนไปเจอคนแนะนำให้ทำ fwrite ส่งค่าเข้าไปที่เครื่องพิมพ์เป็นค่าสำหรับการ kick cash drawer ออกมาซึ่งก็ได้เป็นโค้ตข้างล่างนี้

$fpo = fsockopen("192.168.1.155", 9100, $er, $es, 10); 
if (!$fp) { 
    die('ERROR'); 
}else{ 
  $opencode = Chr(27) . Chr(112) . Chr(0). Chr(148) . Chr(49);
  fwrite($fp, $opencode);
  fclose($fp); 
} 
//192.168.1.155 เป็นเลข IP ของเครื่องพิมพ์ดู IP เครื่องพิมพ์และตั้งค่าได้โดยก่อนเปิดเครื่อง กดปุ่มพ่นกระดาษออกมาค้างไว้แล้วเปิดเครื่อง ปล่อยมือจากปุ่มพ่นกระดาษแล้วจะมีตั้งค่าออกมาครับ

แต่… อย่างที่บอกไปแล้วข้างบนครับคือโค้ตมันออกแบบมาเอาไว้ใช้สำหรับเครื่องพิมพ์ในระบบ Network ซึ่งหมายความว่าจะใช้โค้ตนี้ได้เครื่องพิมพ์ปัจจุบันของผม (แบบ USB) ใช้ไม่ได้ เลยตัดสินใจเปลี่ยนซะเลยเป็น Xprinter เหมือนเดิม แต่เปลี่ยนเป็นรุ่น 80C ซึ่งรองรับ Network

พอเราเสียบสายทุกอย่างเรียบร้อยแล้ว

ไม่ได้ใช้ได้เฉพาะ XPrinter อย่างเดียวนะ ใช้ได้เกือบทุกรุ่นเลยยังไงลองหาข้อมูลเกี่ยวกับ Kick Code กับยี่ห่อ + รุ่นในอินเทอร์เนตดูครับ อย่างของผมคือ 27 112 0 148 49 ดังนั้นก็เอาไปแก้ในโค้ตได้เลยครับ

ร้านหมูเรารองรับ Line Pay Barcode แล้วนะ

ช่วงหลังๆพวก E-Wallet กำลังมาแรง รู้สึกถ้าตามไม่ทันก็จะตกยุค หลังจากเอาพร้อมเพย์มาใส่ชีวิตก็ดีมีคนใช้บ้าง แต่ก็ไม่เยอะเท่าไร

เมื่อสักเดือนสองเดือนก่อนอยู่ๆก็มีคนมาขอจ่ายค่าหมู ด้วย True Wallet

เราก็โชคดีที่มีแอพในเครื่องพอดีก็โชคดีไป เลยรับจ่ายได้ เลยมานั่งนึกดูว่า เราใช้ True Wallet กับอะไรบ้างนึงขึ้นได้ก็เป็น 7-11 แค่โชว์บาร์โค้ตก็จ่ายเงินได้เลย ggez

ก็เลยนึกสนุกอยากเอาไปติดตั้งในระบบ POS ที่ร้านบ้าง เลยไปพบความจริงว่าของทรูไม่ให้ต่อ API ต้องใช้เครื่องตัดเงินของทรูอย่างเดียว… (เห็นได้ตามแม็คโครครับ) เป้าหมายของเราคือการผสานร่างระบบตัดเงินเข้ากับ POS เพราะฉะนั้นถ้าต้องใช้อุปกรณ์ภายนอก มันเสียเวลาพอๆกับเครื่องรูดบัตรเลยป่ะ? ตัดไปก่อนแล้วกัน ไว้อารมณ์ดีแล้วจะกลับมาดูใหม่อีกที

เลยไปสนใจ Blue Wallet กับ Line Pay มาเจอว่า Blue Wallet ยังไม่เปิดให้นักพัฒนาภายนอกเข้ามาใช้งาน โอเคตัดไปอีกหนึ่ง

แต่ Line Pay นี่เปิดให้ลงทะเบียนมานานแล้ว คนใช้ก็มีจำนวนนึง (เราเองก็หนึ่งในนั้น) ก็เลยลองยื่นสมัครไปได้ก็ดีไม่ได้ก็ไม่ได้ซีเรียสอะไร ก็ส่งเอกสารไปๆมาๆ รอบแรกเหมือนเขาไม่มั่นใจว่าทำธุระกิจเกี่ยวกับอะไรเลยขอให้ถ่ายรูปร้านไปให้ ก็ถ่ายไป รอรวมๆ (นับตั้งแต่เริ่มส่งเอกสาร) อยู่ร่วมประมาณ 3 อาทิตย์มั้งถึงจะได้

เรื่องเอกสารไม่มีข้อติ เขียนเอกสาร API ได้ดีมาก อ่านแล้วเข้าใจเลย

ส่วนของการติดต่อฝั่งเซิฟเวอร์แค่ GET/POST ง่ายๆไม่มีอะไรซับซ้อนแค่นี้ก็หักเงินได้เลยง่ายจัง จะติดอยู่นิดหน่อยคือเรื่องของ IP ของเครื่องที่ทำหน้าที่ยิงค่าเข้า API ของไลน์ต้องมี IP ที่คงที่ไม่งั้นจะลงทะเบียน white list IP ในไลน์ไม่ได้ สุดท้ายเลยต้องเอา VPS วาง script ตัดเงินไว้แล้วเรียกผ่าน POS อีกทีนึง

แต่เรื่องค่าธรรมเนียม ขอบอกเลยว่าค่าธรรมเนียมของ Line Pay แพง กว่าค่าธรรมเนียมของเครื่องรูดบัตรที่ขอกับธนาคาร (บัตร top-tier พวกแพตตินั่ม,วิสด้อม ฯลฯ) อีกครับ (อันนี้ไม่ทราบว่าคนอื่นเป็นอย่างไรนะครับ เอาเฉพาะร้านผมนะ)

ถ้าลูกค้ามีเงินในบัญชี Line Pay เหลือแล้วอยากเอามาซื้อของเล็กๆน้อยๆ (กากหมู,น้ำมันหมู) Line Pay มันเร็วกว่าจริงๆแหละครับยิงปุ๊บได้ปั๊บเร็วเวอร์

 

แต่จะให้ลูกค้าชำระเงินเป็นหลักนั้น ทางไลน์คงต้องพิจารณาเรื่องค่าธรรมเนียมหน่อย มันน่ากลัวมาเลย