オンライン決済Stripeで「有効」の商品のみを取得する方法

# この記事の目的
Next.jsとLaravelで商品管理システムを作っていて、特定の商品のみを取得する方法について記事を作りたくなったので執筆します。
オンライン決済Stripeで「有効」<b><font color="red">(赤枠)</font></b>の商品のみを取得する方法について解説します。

これは、Laravel側でデータを後述の手順で取得することができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169664/b94d939f-548f-43fa-a602-905aaece8247.png)

# Laravel(サーバ側)での処理・実装

`public function listProducts()`関数が今回の記事でやりたい部分です。
まず、Stripeに保存されている商品を全件数取得します。

```sample.php
$products = Product::all();
```

つぎに、全件数をループしながら有効(active)になっている商品を選別・抽出していきます。
```sample.php
            $activeProducts = [];//Add
            foreach($products->data as &$product){
                if($product->active){//Add
                    //dd($product->active);
                    if(isset($product->default_price)){
                        $price = Price::retrieve($product->default_price);
                        $product->price = $price->unit_amount / 100;
                        $product->currency = $price->currency;
                    }
                    $activeProducts[] = $product;
                }
                /*
                if(isset($product->default_price)){
                    $price = Price::retrieve($product->default_price);
                    $product->price = $price->unit_amount / 100;
                    $product->currency = $price->currency;
                }
                */
                
            }
            return response()->json($activeProducts);
```

全文を記載したコードはこちら↓
```backend/app/Http/Controllers/StripController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;//Add
use Stripe\Product;//Add
use Stripe\Price;//Add

class StripeController extends Controller
{
    //Method to create product
    public function createProduct(Request $request){
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));

        //Create Product
        $product = Product::create([
            'name'=>$request->input('productName'),
            'description'=>$request->input('productDescription'),
        ]);

        //Set price
        $price = Price::create([
            'unit_amount'=>$request->input('productPrice')*100,
            'currency'=>'USD',
            'product'=>$product->id,
        ]);

        return response()->json(['product'=>$product,'price'=>$price]);
    }

    //Methos to list all products
    public function listProducts()
    {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
        try{
            //Get list of all products
            $products = Product::all();
            //dd($products->data);
            $activeProducts = [];//Add
            foreach($products->data as &$product){
                if($product->active){//Add
                    //dd($product->active);
                    if(isset($product->default_price)){
                        $price = Price::retrieve($product->default_price);
                        $product->price = $price->unit_amount / 100;
                        $product->currency = $price->currency;
                    }
                    $activeProducts[] = $product;
                }
                /*
                if(isset($product->default_price)){
                    $price = Price::retrieve($product->default_price);
                    $product->price = $price->unit_amount / 100;
                    $product->currency = $price->currency;
                }
                */
                
            }
            return response()->json($activeProducts);
        }catch(\Exception $e){
            return response()->json(['error' => $e->getMessage()], 400);
        }
    }
    //Method to delete product
    public function deleteProduct($productId)
    {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
        //Delete product
        $product = Product::retrieve($productId);
        $product->delete();

        return response()->json(['status'=>'success']);
    }

    //Method to update product
    public function updateProduct($productId,Request $request)
    {
        Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
        //Update product
        $product = Product::retrieve($productId);
        $product->name = $request->name;
        $product->description = $request->description;
        $product->save();
        return response()->json($product);
    }
}

```

以上です。