Stripe Webhooks ਤੋਂ ਬਹੁ-ਭਾਸ਼ਾਈ (Multilingual) ਈਮੇਲਾਂ
SaaS ਨੂੰ ਵਿਸ਼ਵ ਪੱਧਰ 'ਤੇ ਵਧਾਉਣ (Scaling) ਵਿੱਚ ਕੁਝ ਲੁਕਵੇਂ ਖ਼ਤਰੇ ਹੁੰਦੇ ਹਨ। ਸਾਨੂੰ ਆਪਣੇ Stripe webhooks ਵਿੱਚ ਇੱਕ ਅਜਿਹਾ ਖ਼ਤਰਾ ਮਿਲਿਆ।
ਸਾਡਾ ਸਿਸਟਮ ਅੰਗਰੇਜ਼ੀ ਬੋਲਣ ਵਾਲੇ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਖਰੀਦ ਦੀ ਪੁਸ਼ਟੀ, ਨਵਿਆਉਣ (renewals), ਅਤੇ ਅਸਫਲਤਾ ਦੇ ਨੋਟਿਸ ਜਾਪਾਨੀ ਭਾਸ਼ਾ ਵਿੱਚ ਭੇਜ ਰਿਹਾ ਸੀ। ਇਹ ਬੱਗ (bug) ਮਹੀਨਿਆਂ ਤੱਕ ਬਣਿਆ ਰਿਹਾ ਕਿਉਂਕਿ ਇਹ ਸ਼ਾਂਤ ਰਿਹਾ।
ਅਸੀਂ ਕਰੰਸੀ (currency) ਤੋਂ ਭਾਸ਼ਾ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾ ਕੇ ਇਸ ਨੂੰ ਹੱਲ ਕੀਤਾ।
ਅਸੀਂ ਤਿੰਨ ਡਿਜ਼ਾਈਨ ਵਿਕਲਪਾਂ 'ਤੇ ਵਿਚਾਰ ਕੀਤਾ:
- ਵਿਕਲਪ A: ਡਾਟਾਬੇਸ ਵਿੱਚ ਭਾਸ਼ਾ ਨੂੰ ਸਟੋਰ ਕਰਨਾ। ਇਸ ਲਈ ਪੁਰਾਣੇ ਉਪਭੋਗਤਾਵਾਂ ਲਈ migrations ਅਤੇ backfills ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
- ਵਿਕਲਪ B: Stripe API ਤੋਂ ਡਾਟਾ ਲੈਣਾ। ਇਸ ਨਾਲ ਵਾਧੂ API calls ਵਧ ਜਾਂਦੀਆਂ ਹਨ ਅਤੇ ਬਹੁਤ ਸਾਰੇ ਗਾਹਕ ਆਪਣੀ ਪਸੰਦੀਦਾ locale ਸੈੱਟ ਨਹੀਂ ਕਰਦੇ।
- ਵਿਕਲਪ C: webhook payload ਵਿੱਚ ਕਰੰਸੀ ਦੀ ਵਰਤੋਂ ਕਰਨਾ। ਇਹ ਮੁਫ਼ਤ ਹੈ, ਇਸ ਲਈ ਡਾਟਾਬੇਸ ਵਿੱਚ ਕੋਈ ਬਦਲਾਅ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ, ਅਤੇ ਇਹ ਮੌਜੂਦਾ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਤੁਰੰਤ ਕੰਮ ਕਰਦਾ ਹੈ।
ਅਸੀਂ ਵਿਕਲਪ C ਨੂੰ ਚੁਣਿਆ। ਖਰੀਦ ਦੇ ਸਮੇਂ ਕਰੰਸੀ ਇੱਕ ਨਿਸ਼ਚਿਤ ਸੰਕੇਤ ਹੁੰਦੀ ਹੈ। ਜੇਕਰ ਕੋਈ ਉਪਭੋਗਤਾ USD ਵਿੱਚ ਭੁਗਤਾਨ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਅੰਗਰੇਜ਼ੀ ਮਿਲੇਗੀ। ਜੇਕਰ ਉਹ JPY ਵਿੱਚ ਭੁਗਤਾਨ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਜਾਪਾਨੀ ਮਿਲੇਗੀ।
ਤਰਕ (logic) ਸਧਾਰਨ ਹੈ:
function lang_from_currency(string $currency): string {
$en_currencies = ['usd'];
return in_array(strtolower($currency), $en_currencies, true) ? 'en' : 'ja';
}
ਇਹ ਚਾਰ ਮੁੱਖ Stripe events ਲਈ ਕੰਮ ਕਰਦਾ ਹੈ:
- checkout.session.completed
- invoice.payment_succeeded
- invoice.payment_failed
- customer.subscription.updated
ਸਾਨੂੰ PHP ਦੇ ਨਾਲ ਇੱਕ ਤਕਨੀਕੀ ਖ਼ਤਰਾ ਵੀ ਮਿਲਿਆ।
mb_language('Japanese') ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ subject lines ISO-2022-JP ਵਿੱਚ encode ਹੋ ਜਾਂਦੀਆਂ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਸੈਟਿੰਗ ਨਾਲ ਅੰਗਰੇਜ਼ੀ subject line ਭੇਜਦੇ ਹੋ, ਤਾਂ Gmail ਅਤੇ Outlook ਇਸਨੂੰ ਅਜੀਬ encoding ਵਜੋਂ ਦੇਖਦੇ ਹਨ। ਇਸ ਨਾਲ ਤੁਹਾਡਾ spam score ਵਧ ਜਾਂਦਾ ਹੈ।
ਇਸ ਦਾ ਹੱਲ ਭਾਸ਼ਾ ਦੇ ਆਧਾਰ 'ਤੇ encoding ਨੂੰ ਬਦਲਣਾ ਹੈ:
mb_language($lang === 'en' ? 'uni' : 'Japanese');
'uni' ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ UTF-8 Base64 ਦੀ ਵਰਤੋਂ ਹੁੰਦੀ ਹੈ। ਇਹ ਤੁਹਾਡੀਆਂ ਈਮੇਲਾਂ ਨੂੰ spam folder ਤੋਂ ਦੂਰ ਰੱਖਦਾ ਹੈ।
ਇਸ ਹੱਲ ਤੋਂ ਤਿੰਨ ਸਬਕ:
- event payload ਦੀ ਵਰਤੋਂ ਕਰੋ। ਜੇਕਰ ਡਾਟਾ ਪਹਿਲਾਂ ਹੀ webhook ਵਿੱਚ ਹੈ, ਤਾਂ ਆਪਣੇ ਡਾਟਾਬੇਸ ਨੂੰ ਨਾ ਛੇੜੋ। ਇਹ ਜੋਖਮ ਅਤੇ ਰੱਖ-ਰਖਾਅ (maintenance) ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ।
- ਆਪਣੀ encoding ਦਾ ਧਿਆਨ ਰੱਖੋ। ਜੇਕਰ ਤੁਸੀਂ ਕਈ ਭਾਸ਼ਾਵਾਂ ਦਾ ਸਮਰਥਨ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੀ subject line encoding ਸਮੱਗਰੀ (content) ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਹੋਵੇ ਤਾਂ ਜੋ spam filters ਤੋਂ ਬਚਿਆ ਜਾ ਸਕੇ।
- hardcoded values ਦੀ ਜਾਂਚ ਕਰੋ। ਜਦੋਂ ਤੁਸੀਂ ਅੰਤਰਰਾਸ਼ਟਰੀ ਪੱਧਰ 'ਤੇ ਜਾਂਦੇ ਹੋ, ਤਾਂ ਚੈੱਕ ਕਰੋ ਕਿ ਕੀ ਤੁਹਾਡੇ notification functions ਵਿੱਚ hardcoded ਭਾਸ਼ਾ ਸੈਟਿੰਗਾਂ ਤਾਂ ਨਹੀਂ ਹਨ।
ਇੱਕ stateless design ਤੁਹਾਡੇ ਸਿਸਟਮ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਵਿੱਚ ਆਸਾਨ ਅਤੇ ਟੁੱਟਣ ਤੋਂ ਬਚਾਉਣ ਵਿੱਚ ਵਧੇਰੇ ਮਜ਼ਬੂਤ ਬਣਾਉਂਦਾ ਹੈ।
