18 个版本 (5 个稳定版)
2.3.0 | 2024年8月9日 |
---|---|
2.1.0 | 2024年5月13日 |
1.0.0 | 2024年2月2日 |
0.9.1 | 2024年1月29日 |
0.5.0 | 2023年9月4日 |
在 Web 编程 中排名第 211
每月下载量 354 次
280KB
3.5K SLoC
苹果 App Store 服务器 Rust 库
App Store 服务器 API 和 App Store 服务器通知的 Rust 服务器库
安装
在项目的 Cargo.toml
文件中的 dependencies
部分指定 app-store-server-library
[dependencies]
app-store-server-library = { version = "2.3.0", features = ["receipt-utility", "api-client"] }
查看 crates.io 获取最新版本号。
使用方法
API 使用
use app_store_server_library::{AppStoreServerApiClient, Environment, AppStoreApiResponse, APIError};
#[tokio::main]
async fn main() {
let issuer_id = "99b16628-15e4-4668-972b-eeff55eeff55";
let key_id = "ABCDEFGHIJ";
let bundle_id = "com.example";
let encoded_key = std::fs::read_to_string("/path/to/key/SubscriptionKey_ABCDEFGHIJ.p8").unwrap(); // Adjust the path accordingly
let environment = Environment::Sandbox;
let client = AppStoreServerApiClient::new(encoded_key, key_id, issuer_id, bundle_id, environment);
match client.request_test_notification().await {
Ok(response) => {
println!("{}", response.test_notification_token);
}
Err(err) => {
println!("{}", err.http_status_code);
println!("{:?}", err.raw_api_error);
println!("{:?}", err.api_error);
println!("{}", err.error_message);
}
}
}
注意:要从应用/tx 收据中提取事务 ID,必须启用
api-client
功能。
验证使用
// .unwrap() used for example purposes only
let root_cert = "apple-root-cert-in-base-base64-format"; // https://www.apple.com/certificateauthority/AppleRootCA-G3.cer
let root_cert_der = root_cert.as_der_bytes().unwrap(); // Use `base64` crate to decode base64 string into bytes
let verifier = SignedDataVerifier::new(
vec![root_cert_der], // Vector of root certificates
Environment::Sandbox, // Environment
"app.superapp.apple".to_string(), // Bundle id
Some(12345678), // App id
);
let payload = "signed-payload";
let decoded_payload = verifier.verify_and_decode_notification(payload).unwrap();
收据使用
let receipt = "MI..";
let transaction_id = extract_transaction_id_from_app_receipt(receipt);
注意:要从应用/tx 收据中提取事务 ID,必须启用
receipt-utility
功能。
促销优惠签名创建
// .unwrap() used for example purposes only
let private_key = include_str!("../assets/SubscriptionKey_L256SYR32L.p8");
let creator = PromotionalOfferSignatureCreator::new(private_key, "L256SYR32L".to_string(), "com.test.app".to_string()).unwrap();
let signature: String = creator.create_signature("com.test.product", "com.test.offer", uuid::Uuid::new_v4().to_string().as_str(), &uuid::Uuid::new_v4(), i64::try_from(system_timestamp()).unwrap()).unwrap();
文档
参考
依赖关系
~12–25MB
~478K SLoC