IOS订阅优惠-PHP生成ECDSA算法签名
程序员文章站
2022-07-09 20:50:50
一些注意事项 openssl是可以直接进行ECDSA签名的 1、$nonce 必须为小写,并且每次购买时的nonce不能重复否则会报签名错误无法购买 code -12 2、$time 是毫秒time*1000 3、\u2063 的字符格式需要注意 php里面可以用户"\u{2063}" 来表示,但是 ......
<?php
use ramsey\uuid\uuid;
class itunessignaturegenerator {
private $appbundleid = 'www.u17.com';
private $keyidentifier = 'zzzzzzz';
private $itunesprivatekeypath = '/path/to/the/file.p8;
/**
* @see https://developer.apple.com/documentation/storekit/in-app_purchase/generating_a_signature_for_subscription_offers
*
* @param $productidentifier
* @param $offeridentifier
*
* @return signature
*/
public function generatesubscriptionoffersignature($productidentifier, $offeridentifier)
{
$nonce = strtolower(uuid::uuid1()->tostring());
$timestamp = time() * 1000;
$applicationusername = 'username';
$message = implode(
"\u{2063}",
[
$this->appbundleid,
$this->keyidentifier,
$productidentifier,
$offeridentifier,
$applicationusername,
$nonce,
$timestamp
]
);
$message = $this->sign($message);
return new signature(
base64_encode($message),
$nonce,
$timestamp,
$this->keyidentifier
);
}
private function sign($data)
{
$signature = '';
openssl_sign(
$data,
$signature,
openssl_get_privatekey('file://' . $this->itunesprivatekeypath),
openssl_algo_sha256
);
return $signature;
}
}
一些注意事项 openssl是可以直接进行ecdsa签名的
1、$nonce 必须为小写,并且每次购买时的nonce不能重复否则会报签名错误无法购买 code -12
2、$time 是毫秒time*1000
3、\u2063 的字符格式需要注意 php里面可以用户"\u{2063}" 来表示,但是有的一些环境不支持这样的写法 所以还可以使用另外一种 json_decode('"\u2036"') 来转一下格式
上一篇: 监控微信小程序中的慢HTTP请求
下一篇: 前端基础 - CSS