php数字签名算法,PHP生成ECDSA算法数字签名

201610181557196870.jpg

码农公社  210.net.cn  210= 1024  10月24日一个重要的节日--码农(程序员)节

在给买家进行优惠时PHP生成ECDSA算法数字签名

一些注意事项   openssl是可以直接进行ECDSA签名的

1、$nonce 必须为小写,并且每次购买时的nonce不能重复否则会报签名错误无法购买 code -12

2、$time   是毫秒time*1000

3、\u2063 的字符格式需要注意    php里面可以用户"\u{2063}" 来表示,但是有的一些环境不支持这样的写法 所以还可以使用另外一种  json_decode('"\u2036"')  来转一下格式

use Ramsey\Uuid\Uuid;

class ItunesSignatureGenerator {

private $appBundleID = 'www.210.net.cn';

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值