Skip to content

Instantly share code, notes, and snippets.

View j3k0's full-sized avatar

Jean-Christophe Hoelt j3k0

View GitHub Profile
{
"applicationUsername": "my-username-123456",
"subscription": {
"transactionId": "apple:12309a12",
"platform": "apple",
"sandbox": true,
"productId": "apple:monthly.basic",
"purchasedAt": "2019-06-24T21:52:16.000Z",
"renewedAt": "2019-06-28T01:07:29.000Z",
"expiresAt": "2019-06-28T01:12:29.000Z",
{
"applicationUsername":"1E6676C70C123AA18222EF001120CAE1",
"purchases": {
"apple:monthly_subcscription": {
"productId":"apple:monthly_subcscription",
"platform":"apple",
"sandbox":true,
"purchaseId":"apple:1000000532000112",
"purchaseDate":"2019-07-29T17:14:00.000Z",
"expirationDate":"2019-07-29T17:19:00.000Z",
@j3k0
j3k0 / request.json
Last active May 25, 2020 09:04
POST /v1/validate Request Body
{
"id": "com.example.app",
"type": "application",
"transaction": {
"id": "com.example.app",
"type": "ios-appstore",
"appStoreReceipt": "MIIabcdefgh...xyz=="
},
"additionalData": {
"applicationUsername": "james_bond_007"
@j3k0
j3k0 / response.json
Last active May 25, 2020 09:08
POST /v1/validate Response Body
{
"ok": true,
"data": {
"ineligible_for_intro_price": [
"my_subscription"
],
"transaction": { "platform-specific transaction data": "can be ignored" },
"collection": [
{
"id": "my_subscription",
@j3k0
j3k0 / response.json
Created May 25, 2020 10:18
Validate an Expired Subscription
{
"ok": false,
"route": "/v1/validate",
"status": 419,
"code": 6778003,
"message": "Transaction has expired 2020-03-09 10:24:06 Etc/GMT",
}
@j3k0
j3k0 / demo-code.js
Created May 26, 2020 07:10
angular in-app purchase example
function sync() {
$scope.ready = store.ready();
$scope.product = Object.assign({}, store.get("my_product_id"));
}
const dsync = window.debounce(sync, 50);
$scope.$on("$ionicView.beforeEnter", function () {
dsync();
store.when("my_product_id").updated(dsync);
});
@j3k0
j3k0 / android-release.sh
Created October 15, 2018 07:55
Generate an android release build with cordova
#!/bin/bash
cd "$(dirname "$0")"
ROOT_DIR="$(pwd)"
FINAL_APK="${FINAL_APK:-$ROOT_DIR/android-release-$(date +%Y%m%d-%H%M).apk}"
KEYSTORE="${KEYSTORE:-$ROOT_DIR/android-release.keystore}"
if test ! -e "$KEYSTORE"; then
echo "ERROR: Keystore file $KEYSTORE not found."
@j3k0
j3k0 / webhook.purchases.updated.json
Created October 22, 2019 06:25
Example Fovea.Billing webhook request
{
"type": "purchases.updated",
"applicationUsername": "my_username",
"purchases": {
"apple:cc.fovea.purchase.subscription1sx": {
"productId": "apple:cc.fovea.purchase.subscription1sx",
"platform": "apple",
"sandbox": true,
"purchaseId": "apple:1000000573800707",
"purchaseDate": "2019-09-29T14:15:44.000Z",
@j3k0
j3k0 / index.html
Last active March 20, 2021 18:14
Tutorial Cordova In-App Purchase Non-Consumable
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>Hello World</title>
</head>
<body>
@j3k0
j3k0 / index.html
Last active September 15, 2022 09:51
Tutorial Cordova In-App Purchase Consumable
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>Hello World</title>
</head>
<body>