https://github.com/aktsk/kalvados
Apple receipt generator for testing
https://github.com/aktsk/kalvados
Last synced: about 1 year ago
JSON representation
Apple receipt generator for testing
- Host: GitHub
- URL: https://github.com/aktsk/kalvados
- Owner: aktsk
- License: apache-2.0
- Created: 2018-02-20T05:56:53.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-08-27T08:26:52.000Z (over 7 years ago)
- Last Synced: 2024-06-20T08:08:05.426Z (almost 2 years ago)
- Language: Go
- Homepage:
- Size: 26.4 KB
- Stars: 14
- Watchers: 38
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Kalvados [](https://travis-ci.org/aktsk/kalvados)
Kalvados is an Apple receipt generator for testing.
You can use kalvados to get base64 encoded bynary receipt data from JSON.
JSON format that kalvados can parse is like this.
```json
{
"receipt_type": "ProductionSandbox",
"adam_id": 0,
"app_item_id": 0,
"bundle_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"application_version": "1",
"download_id": 0,
"version_external_identifier": 0,
"receipt_creation_date": "2017-04-07 03:53:44 Etc/GMT",
"receipt_creation_date_ms": "1491537224000",
"receipt_creation_date_pst": "2017-04-06 20:53:44 America/Los_Angeles",
"request_date": "2018-02-21 00:13:33 Etc/GMT",
"request_date_ms": "1519172013493",
"request_date_pst": "2018-02-20 16:13:33 America/Los_Angeles",
"original_purchase_date": "2013-08-01 07:00:00 Etc/GMT",
"original_purchase_date_ms": "1375340400000",
"original_purchase_date_pst": "2013-08-01 00:00:00 America/Los_Angeles",
"original_application_version": "1.0",
"in_app": [
{
"quantity": "1",
"product_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"transaction_id": "1000000288468336",
"original_transaction_id": "1000000288468336",
"purchase_date": "2017-04-07 03:47:41 Etc/GMT",
"purchase_date_ms": "1491536861000",
"purchase_date_pst": "2017-04-06 20:47:41 America/Los_Angeles",
"original_purchase_date": "2017-04-07 03:47:41 Etc/GMT",
"original_purchase_date_ms": "1491536861000",
"original_purchase_date_pst": "2017-04-06 20:47:41 America/Los_Angeles",
"is_trial_period": "false"
}
]
}
```
----
## Usage
### As a receipt generator command line tool
Install `kalvados` command.
```
go get github.com/aktsk/kalvados/cmd/kalvados
```
Run kalvados command.
```
cat receipt.json | kalvados -keyFile key.pem -certFile cert.pem
```
### As a receipt generator server
Install `kalvados-server` command.
```
go get github.com/aktsk/kalvados/cmd/kalvados-server
```
Run kalvados-server command.
```
kalvados-server -keyFile key.pem -certFile cert.pem
```
### As a receipt generator library
```go
package main
import (
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
"os"
"github.com/aktsk/kalvados/receipt"
)
func main() {
jsonFile, _ := os.Open("receipt.json")
receiptJSON, _ := ioutil.ReadAll(jsonFile)
jsonFile.Close()
keyFile, _ := os.Open("key.pem")
keyPEM, _ := ioutil.ReadAll(keyFile)
keyFile.Close()
keyDER, _ := pem.Decode(keyPEM)
key, _ := x509.ParsePKCS1PrivateKey(keyDER.Bytes)
certFile, _ := os.Open("cert.pem")
certPEM, _ := ioutil.ReadAll(certFile)
certFile.Close()
certDER, _ := pem.Decode(certPEM)
cert, _ := x509.ParseCertificate(certDER.Bytes)
rcpt, _ := receipt.Encode(receiptJSON, key, cert)
fmt.Println(rcpt)
}
```
### Deploy kalvados server to Google App Engine
You can run kalvados server on Google App Engine.
```
cd appengine/app
make deploy
```
Before deploy, you should put your private key file as `key.pem` and certificate file as `cert.pem` under appengine/app directory. Or you can set your private key and certificate in app.yaml like this.
In app.yaml:
```yaml
env_variables:
# It seems GAE/Go could not handle environment variables
# that has return code.So use ">-" to replace return code
# with white space
CERTIFICATE: >-
-----BEGIN CERTIFICATE-----
MIIB2zCCAUSgAwIBAgIEOZu39TANBgkqhkiG9w0BAQsFADApMRAwDgYDVQQKEwdB
Y21lIENvMRUwEwYDVQQDEwxFZGRhcmQgU3RhcmswIBcNMTgwMzE5MTY1MzA1WhgP
MjM4MzAzMTkxNjUzMDVaMCUxEDAOBgNVBAoTB0FjbWUgQ28xETAPBgNVBAMTCEpv
biBTbm93MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJxF2I+OtGLk/7yY6+
IcXv9XI9cBg30QOPjdZt6hP9MEZJkIk4LIKnxFbm4GBQ0Zf3MCovoL7lp7h6DSAN
mj7QRy6XZqAkW3D+qF6bGRNiw/3PwUw0HpuvGkbGY4d8VmMG0Jia9iF/B4f1fRIy
39k3ILBXDZ66TE9dryFxkgLIxwIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCBaAwDQYJ
KoZIhvcNAQELBQADgYEASHF7Wl2kRj294uM6WahMjklLj0kHRX9ZQ2xbezKf4P/Z
o7d2zZ6xiB44wfoK/uEGfjL59Qe17mkOVamXMFMAWmVgtZzOzGkUzn45H7vmfQX+
HA/9anzcllC0cswK7g60a7cULdcVxgsaI2q3mGL4UitneeO+BtSSSg5fLcPHZW8=
-----END CERTIFICATE-----
includes:
- secret.yaml
```
In secret.yaml **(Do not commit and push this file to SCM)**:
```yaml
env_variables:
# It seems GAE/Go could not handle environment variables
# that has return code.So use ">-" to replace return code
# with white space
PRIVATE_KEY: >-
-----BEGIN PRIVATE KEY-----
MIICXAIBAAKB.....
.....
.....
.....
.....
.....
-----END PRIVATE KEY-----
```
----
## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request
----
## License
See [LICENSE](LICENSE).
----
## See Also
* [Receipt Validation Programming Guide](https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Introduction.html)
* [aktsk/nolmandy: Apple receipt processing server/library](https://github.com/aktsk/nolmandy)