これらの日々、暇な時に小さな店を立ち上げました。正式に始める前に、もしよければ私の2m ショップ🛒を見て回ってください。
デフォルトのテーマは十分に魅力的で、バックエンドの機能も基本的なニーズを満たすことができますが、商品の設定時には Wiki に関連する説明が見つからず、関連するチュートリアルも見つかりませんでした。機能があるという考え方に基づいて、この記事は問題の解決に役立つかもしれません。もちろん、私の時間を購入していただけると嬉しいです。
検索の段階では、PHP
とLaravel
について基本的な知識が必要です。もし持っていない場合は、直接「サンプル」セクションにスキップしてください。この記事のすべてのコードは、dujiaoka
リポジトリから取得され、MITライセンス
でオープンソース化されています。
それでは始めましょう。
機能の定義を見つける#
コード内でコールバックイベント
のコメントをすばやく検索できます。場所はapp/Service/OrderProcessService.php
です。
これに従って、ApiHook
クラスの定義を見つけます。場所はapp/Jobs/ApiHook.php
で、その後、クラスのコンストラクタを見てみます。
public function __construct(Order $order)
{
$this->order = $order;
$this->goodsService = app('Service\GoodsService');
}
ここで、$order
変数が渡され、サービスがインポートされています。dispatch
の後には、Laravel が提供するキューシステムがあり、コールバックイベントをキューに追加して実行できます。
それでは、goodsService
を少し見てみましょう。app/Service/GoodsService.php
にあり、いくつかの商品処理の基本的な関数がありますので、イベントのhandle
を直接見てみましょう。
public function handle()
{
$goodInfo = $this->goodsService->detail($this->order->goods_id);
// 支払いコールバックの設定があるかどうかを確認
if(empty($goodInfo->api_hook)){
return;
}
$postdata = [
'title' => $this->order->title,
'order_sn' => $this->order->order_sn,
'email' => $this->order->email,
'actual_price' => $this->order->actual_price,
'order_info' => $this->order->info,
'good_id' => $goodInfo->id,
'gd_name' => $goodInfo->gd_name
];
$opts = [
'http' => [
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => json_encode($postdata,JSON_UNESCAPED_UNICODE)
]
];
$context = stream_context_create($opts);
file_get_contents($goodInfo->api_hook, false, $context);
}
実際にコールバックイベント
は何も特別なものではありません。単に処理された商品情報を設定した URL にリクエストしています。
何を送信しているのか#
それでは、コールバック時にシステムが送信しているものを理解する必要があります。
postData
に基づいて:
$postdata = [
'title' => $this->order->title,
'order_sn' => $this->order->order_sn,
'email' => $this->order->email,
'actual_price' => $this->order->actual_price,
'order_info' => $this->order->info,
'good_id' => $goodInfo->id,
'gd_name' => $goodInfo->gd_name
];
注文タイトル
、注文番号
、購入者のメールアドレス
、実際の支払い価格
、注文情報
、商品ID
、商品タイトル
が送信されます。
ここでの注文タイトル
と商品タイトル
の違いは、注文タイトルには注文の数量が含まれることです。フォーマットは通常、商品タイトル
x 数量
です。
注文情報は、商品のその他の入力フィールドの設定
です。app/Service/OrderService.php:185
によると、出力形式は次のようになります。
key1:value1
key2:value2
...
これにより、アカウント情報の入力など、自動的なリチャージやクーポンの自動配布などを実現することができます。
環境パラメータに基づいて、他のいくつかの情報を得ることができます:
$opts = [
'http' => [
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => json_encode($postdata,JSON_UNESCAPED_UNICODE)
]
];
- リクエストメソッドは POST です。
- リクエストの内容は JSON エンコードされます。
- JSON 内の中国語などの特殊文字は Unicode エンコードされません。
上記の情報に基づいて、ある程度の基礎知識を持っている方は、コールバックイベントを利用していくつかのロジックを実装することができるでしょう。しかし、もう少し進んで、いくつかの例を挙げてみましょう。
いくつかの例#
以下の例は、私が適当に作ったものであり、機能の実現可能性やコードの安全性を保証するものではありません。
渡されたデータを受け取り、配列に保存する#
<?php
try {
$data = json_decode(file_get_contents('php://input'), true);
}
catch (JsonException $e) {
http_response_code(400);
exit("Not valid data.");
}
渡されたカスタムフィールドを配列に保存する#
$customs = [];
$custom_lines = explode(PHP_EOL, $data['order_info']);
array_pop($custom_lines);
foreach ($custom_lines as $line) {
list($key, $value) = explode(":", $line);
$customs[$key] = $value;
}
ユーザーにチャージするフリをする#
あなたが直接ユーザーに R コインをチャージするクールな API を持っていると仮定しましょう。ページのカスタムフィールドはrr
です。そして、商品名は代充10R币
です。次のようにすることができます:
$base = 10;
$num = intval(explode(" x ",$data['title']));
file_get_contents("あなたのクールなAPI?rr=".$customs['rr']."&num=".($base*$num));
これで完了です。
楽しんでください。