Microsoft Power AutomateでMicrosoft Power Appsからオンライン決済サービスstripeにAPI連携する方法（商品情報の自動登録編）


こちらの記事は、『Microsoft Power Automate Advent Calendar 2022』の24日掲載記事です。

https://qiita.com/advent-calendar/2022/powerautomate

イカにちは〜🦑✨
勉強系VTuberのあきイカと申します！
アドベントカレンダーのネタとして、Power Appsでフリマアプリを作り、オンライン決済の実装に挑戦しました。成功するまでの経緯やつまづき、挑戦してみての感想については、『Microsoft Power Apps Advent Calendar 2022』の方の記事に記載しています。よかったらご覧ください。

https://note.com/akiika_yuruyuru/n/n7e76a1f76d69

こちらのQiitaの記事では、**Power AutomateでどのようにPower Appsとオンライン決済サービスStripeを連携させて、自動的に商品情報を登録できるようにしたか**について、内容を絞ってお伝えします。

:::note info
参考：
PowerAutomateのフローを作成する際、下記の動画内で配布されているサンプルフローを参考にさせていただきました。ぜひこちらの動画もご覧ください。

LINE Developer Community
【ローコード】Power Automate×Stripe×LINEでチャットコマースを作ろう
https://youtu.be/Ru8xu1PymP0
ご登壇者・フロー作成者　MicrosoftMVP りなたむ様 https://twitter.com/R_t_A_n_M
:::


# オンライン決済サービスstripeについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/c5f2daa5-4e07-1466-6403-ee744311451a.png)
https://stripe.com/jp

stripeは、提供されているAPIを使用して、GooglePay決済とクレジットカード決済を実装できるサービスです。開発者(テスト)環境が用意されており、無料で試すことができますので、今回のフリマアプリ内の決済機能を実装するのに利用しました。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/a703b3da-2317-cea9-c170-e43b10543b0b.png)
stripeの商品情報の画面です。
stripeで決済を行うには、事前にstripeに商品を登録しておく必要があります。
決済に必要な情報として、商品名と金額のみ登録しています。
画面下のAPIIDは、決済時に商品を指定するために必要なIDです。このIDは、stripeで商品登録を行うと、自動的に作成されます。


# Dataverseの商品テーブルの構造
Power Automateから決済処理のAPIリクエストを送信するために、Power Apps側にもAPIIDの情報を持たせておく必要がありました。データベースは、Microsoft Dataverseを使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/9cf47555-79b8-dc46-d871-eb2822c980b9.png)
決済に必要な項目、商品名・商品価格・APIIDは必須カラムです。その他のカラムは適宜追加します。

# 連携のイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/b7009cf1-dada-24ff-1316-0c029646a321.png)
フリマアプリの画面で出品登録操作を行うと、Dataverseの商品テーブルに商品が登録されます。
Dataverseへの新規アイテムの追加をトリガーにして、Power Automateが動き出します。
商品名と商品価格をDataverseから取得して、stripeにAPIリクエストを送信します。
stripeに作成された商品情報から、APIIDを取得してDataverseの商品データに追加します。


# Power Automateフローの全容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/d089d9c7-c136-6b2f-5539-4a2c3eefdedb.png)

### Power AppsからDataverseへの出品登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/bca59c64-5239-70fb-3308-b11d9e6bd6c9.png)
こちらはシンプルに、通常のFormを使用しています。データ接続しているDataverseの商品テーブルに対して登録できるように、チェックアイコンのOnSelectに`SubmitForm(NewForm)`がセットされています。

### Power Automateのトリガーの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/00adfee6-7573-45e7-0ccc-4c55f50383ee.png)
自動化したクラウドフローから、Dataverseの「行が追加、変更、または削除された場合」のトリガーを選択して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/543bd21e-1ad7-dfa1-a74b-20526e8dfdd8.png)
種類の変更は「作成」を選択し、テーブル名を選択。スコープは「Business unit」を選択しました。

### シークレットキーをセットする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/f404fe82-e18a-bb82-92df-94733fff9d84.png)
stripeのホームのページで、シークレットキーをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/ab339472-8d8f-ed1b-9103-c8c6654447e5.png)
stripeに接続するためのシークレットキーを変数に入れておきます。「変数を初期化する」アクションを使用しています。

### 新規作成されたレコードの行IDを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/6bbb8163-0dad-5bf8-e478-a9f31351fde9.png)
Dataverseに新規登録したアイテムの行IDを取得します。「変数を初期化する」アクションを使用しています。
ここで値に設定した`Item`とは、DataverseのItemテーブル内にシステムで自動生成されている、アイテムの識別子を格納しているカラムを指します。環境によって変わる部分ですが、おそらくカラム名＝テーブル名になっているかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/934e8b58-b06f-38f9-27ec-0b237ec94c34.png)

### stripeに商品を登録する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/25b0df99-17ce-92c7-ab3f-0a5fb176b1fe.png)
「HTTP」アクションを使用します。
方法は、`POST`を選択。
URIは、`https://api.stripe.com/v1/products`を入力。
ヘッダーの一行目に、認証情報を入力します。
`Authorization`　`Bearer @{variables('シークレットキー')}`
二行目に、Content-Typeを指定します。
`Content-Type`　`application/x-www-form-urlencoded`
本文には、下記のように入力。
```name=@{triggerOutputs()?['body/cr30a_9084bc35d2e5487ba14a45...']}&default_price_data[currency]=JPY&default_price_data[unit_amount]=@{triggerOutputs()?['body/cr30a_price']}```

:::note warn
本文の商品名と商品価格の部分は、Dataverseの列を指定しています。
ご自身の環境によって、適宜置き換えてください。
:::

### レスポンスの解析
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/76847c79-bde3-2dd3-3059-41da7170ab4e.png)
「JSONの解析」アクションを使用します。
stripeからのレスポンスを解析し、新規登録した商品のAPIIDを取得できるようにします。
スキーマには下記をそのまま貼り付けます。

```json:json
{
    "type": "object",
    "properties": {
        "id": {
            "type": "string"
        },
        "object": {
            "type": "string"
        },
        "active": {
            "type": "boolean"
        },
        "attributes": {
            "type": "array"
        },
        "created": {
            "type": "integer"
        },
        "default_price": {
            "type": "string"
        },
        "description": {},
        "images": {
            "type": "array"
        },
        "livemode": {
            "type": "boolean"
        },
        "metadata": {
            "type": "object",
            "properties": {}
        },
        "name": {
            "type": "string"
        },
        "package_dimensions": {},
        "shippable": {},
        "statement_descriptor": {},
        "tax_code": {},
        "type": {
            "type": "string"
        },
        "unit_label": {},
        "updated": {
            "type": "integer"
        },
        "url": {}
    }
}
```

### 取得したAPIIDをDataverseの商品テーブルに追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954800/97bf3f67-a797-c51a-e478-b3778de27a38.png)
行IDに、変数に格納しておいた`行ID`を指定する。
ApiIDに、レスポンスの解析の結果の中にある、`@{body('レスポンスの解析')?['default_price']}`を指定する。

# 終わりに

上記の手順でPower Automateのフローを組むことによって、各サービスを連携することができ、Power Appsで出品登録をすると、stripeに自動的に商品情報の登録を済ませることができます。


**私、あきイカについて**
勉強系VTuberとして、勉強会を運営しています。
ノーコード・ローコード・RPAが中心。
2022年12月現在は、Microsoft Power Appsで家計簿アプリを作っています。
よかったらYouTubeチャンネルものぞいてみてください✨

https://www.youtube.com/@akiika-yuruyuru