stripeの決済データをRevenueCatに同期する
背景
Stripeで動いているFlutter大学にRevenueCatを導入しようと思って、いろいろ調査したので記事に残します。
RevenueCatとStripeが両方動くことになりそうなので、うまく同期できて一元管理できた方が良さそうじゃね? と思って、同期を試してみました。
同期の手順は以下のドキュメントにも書いてあります。
まずはStripeマーケットプレイスからRevenueCatを追加
StripeのproductをRevenueCatのentitlementsに登録しておく
iOS、Androidと並んで、Stiripeアプリのプロダクトが並びます。
この時、identifierはstripeのproductのidと同じにします。
StripeでSubscriptionが作られた時にAPIを叩く
以下の記事の「5. Send Stripe tokens to RevenueCat」の部分です。
以下はFirebase Functions内でのコードです。
以下のようなpostReceipt関数を作って、apiを呼ぶことにしました。
import * as functions from 'firebase-functions';
import axios from 'axios';
export async function postReceipt(userId: string, subscriptionId: string): Promise<void> {
const REVENUECAT_API_KEY = functions.config().public.revenuecat.api_key;
try {
const config = {
headers: {
Authorization: `Bearer ${REVENUECAT_API_KEY}`,
'Content-type': 'application/json',
accept: 'application/json',
'x-platform': 'stripe',
},
};
const data = {
app_user_id: userId,
fetch_token: subscriptionId,
};
const url = 'https://api.revenuecat.com/v1/receipts';
const response = await axios.post(url, data, config);
if (response.status === 200) {
console.log('Succeeded to send revenueCat');
} else {
console.log('Failed to send revenueCat: response.status=%s', response.status);
}
} catch (e) {
throw e;
}
}
FirebaseExtensionsでstripeのサブスクをfirestoreに同期しているので、以下のようなトリガー関数を作っておき、subscriptionが作られた時に、同期するAPIを叩くイメージです。
import * as revenueCat from './revenue_cat';
export const onCreateSubscription = functions
.region('asia-northeast1')
.firestore.document('/users/{userId}/subscriptions/{subscriptionId}')
.onCreate(async (snapshot, context) => {
// もろもろのsubscription作成後の処理
// revenueCatに同期
const userId = context.params.userId;
const subscriptionId = context.params.subscriptionId;
await revenueCat.postReceipt(userId, subscriptionId);
});
接続された状態
Stripe側
Stripeからは右側にRevenueCat情報の表示と、RevenueCatへのリンクが出てくるようになります。
RevenueCat側
以下のようにダッシュボードに表示されます。
また、詳細を開くとこんな感じ
所感
RevenueCatのStarterプランは、1000ドル/月の売り上げごとに8ドル課金されるみたいなのですが、stripeと同期すると、iOSアプリ、Androidアプリと同様にしてStripeアプリとしてRevenueCatのダッシュボードに売上として含まれてしまいます。
「なんでStripeの売上なのにRevenueCatでも手数料取られるんや!なんでやねん!」となりそうなので、結局同期するのはやめましたw
さいごに
StripeやRevenueCatまわりは調査の時間が結構かかったので、もし相談したいという方はCodeBoyにて僕の時間を買って聞いてください!
Discussion