Day 0xA - WebHook Api 建立( part 2 )

0x1 前言

昨天建立好 Sinopac controller,今天持续完成 receive_msg的部分

0x2 持续完成 WebHook Api

  1. 增加 Sinopac controller 的函数,要求 API 需要的一些参数

    // app/Http/Controllers/Sinopac.php
    ...
    public function requestDataset(string $service_name, array $dataset)
    {
        $nonce      = $this->getNonce();
        $hash_id    = $this->calcHashId();
        $iv         = $this->calculateIv($nonce);
        $sign       = $this->generateSign($dataset, $nonce, $hash_id);
        $message    = $this->encryptMessage($dataset, $hash_id, $iv);
    
        return [
            'Version'       => '1.0.0',
            'ShopNo'        => $this->shop_no,
            'APIService'    => $service_name,
            'Nonce'         => $nonce,
            'Sign'          => $sign,
            'Message'       => $message
        ];
    }
    ...
    
  2. 在 Controller 建立 Sinopac 的初始化函数,有使用到的函数再初始化就好了,所以不用放在 __construct

    • 这里先写死,日後有需求是多个商家的话再改成串资料库,请记得要改成自己的商店代码杂凑值(key)
    // app/Http/Controllers/Controller.php
    ...
    private function initSinopac()
    {
        return new Sinopac(
            'Shop_no',
            'key_a1',
            'key_a2',
            'key_b1',
            'key_b2');
    }
    ...
    
  3. 同样修改 Controller 的 receive_msg 函数,确保好 Debug,每次要求都先记 log

    // app/Http/Controllers/Controller.php
    ...
    public function receive_msg(Request $request)
    {
        Log::alert('Receive message Content', $request->all());
        $PayToken = $request->get('PayToken');
    
        if (!$PayToken) {
            Log::alert('PayToken Not exist');
            return ['Status' => 'F'];
        }
    
        $sinopac = $this->initSinopac();
        $data = $sinopac->requestDataset('OrderPayQuery', $request->all());
        $message = $sinopac->callApi('https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Order', $data);
    
        Log::info('Reply message', (array) $message);
        return ['Status' => 'S'];
    }
    ...
    
  4. 使用 postman 试看看正不正常,并用 powershell 监看 Log

    > Get-Content -Wait -Tail 10 -Encoding "utf8" .\storage\logs
    

    Postman:
    https://ithelp.ithome.com.tw/upload/images/20210919/20141805JEEuQoIPVJ.png
    https://c.tenor.com/hnP8FWI5fB4AAAAC/joseph-joestar-nice.gif

    Log:
    https://ithelp.ithome.com.tw/upload/images/20210919/20141805rskzQ99zox.png
    https://i.pinimg.com/originals/dc/39/bd/dc39bd97ff8583a9bf7ba85210160fe6.gif

    • debug de了老半天还是一样 /images/emoticon/emoticon02.gif

0x3 今日小结

是的,崩溃的一天,一开始测试都正常,整个完成後直接报错爆好爆满...
明天先回头尝试建立订单吧


<<:  30天学会 Python: Day 4-《资料Collection》

>>:  MLOps在金融产业:模型的可解释性与公平性

IOS、Python自学心得30天 Day-12 模组训练改善-4

前言: 利用while True:的方法後,已经能够以少次数的 epochs 来重复储存模型,但至於...

【Day23】计数器减号按纽及测试小练习,先别偷看解答R ~ (⁎˃ᆺ˂)

这篇要来个小小练习,增加一个减号的按钮,并针对其结果作一个单元测试。 先别往下看,给自己五到十分钟....

IPFS设置跨域

设置跨域代码: ipfs config --json API.HTTPHeaders.Access-...

此刻所发生的所有事,都是你之前选择的结果。

此刻所发生的所有事,都是你之前选择的结果。 Everything that is happening...

Day 21-Unit Test 应用於 Web APIs (情境及应用-1)

Unit Test 应用於 Web APIs-前言 现今大多数的软件工程都是以网路工程为主,那网路工...