昨天把 Webhook api 准备好了,然後怎麽样呢
是的,一直回应 E3501 – 讯息内容错误
,今天就是我的 debug 之日
// app/Http/Controllers/Controller.php
public function create_order(Request $request)
{
$sinopac = $this->initSinopac();
$data = [
'ShopNo' => $sinopac->shop_no,
'OrderNo' => date('YmdHis'),
'Amount' => random_int(4000, 10000),
'CurrencyID' => 'TWD',
'PrdtName' => '大河',
'ReturnURL' => $request->getBaseUrl() . '/order_reply',
'BackendURL' => $request->getBaseUrl() . '/receive_msg',
'PayType' => 'A',
'ATMParam' => [
'ExpireDate' => date('Ymd', time() + 604800),
],
];
$data = $sinopac->requestDataset('OrderCreate', $data);
$message = $sinopac->callApi('https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Order', $data);
return $message;
}
// routes/api.php
Route::post('/create_order', [\App\Http\Controllers\Controller::class, 'create_order']);
追踪了好一阵自发现 calculateHashId 那边有个问题,dechex 转换回来後没有补齐4位
修改一下函数後长这样
// app/Http/Controllers/Sinopac.php
public function calcHashId(): string
{
$a = $b = '';
$length = strlen($this->key_a1);
for ($i = 0; $i < $length; $i += 4) {
$part_of_a = dechex(hexdec(substr($this->key_a1, $i, 4)) ^ hexdec(substr($this->key_a2, $i, 4)));
$part_of_b = dechex(hexdec(substr($this->key_b1, $i, 4)) ^ hexdec(substr($this->key_b2, $i, 4)));
$a .= str_pad($part_of_a, 4, "0");
$b .= str_pad($part_of_b, 4, "0");
}
return strtoupper($a . $b);
}
第二个虫是发生在 encryptMessage,没有做 key 的排序
public function encryptMessage($data, $key, $iv): string
{
ksort($data);
$data = json_encode(array_filter((array)($data)));
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
$encrypt = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
return strtoupper(bin2hex($encrypt));
}
E3501 – 讯息内容错误
,满天飞的虫阿RRRRRRRR,花了一堆时间抓虫...明天把范例程序搬过来测试好了,明天见
<<: [Day06] Jekyll vs Hexo vs Hugo
Instantiate实例化,用於将物件生成至场景中。(参考unity手册) 适合用在复制一样的物件...
这段期间,我们用 Template Driven Forms 与 Reactive Forms 各...
一、何谓运算式? 所谓的运算式是指『运算资料的式子』,其中代表着运算行为的符号称为 『算符』 ,...
那今天不说废话了直接开始 延续昨天的 我们已经建立出一个 main function 和 新增的 f...
建立Chatbot程序 在专案资料夹内右键开启VS Code 左边工作区右键新增档案 将档案命名为a...