IOS订阅优惠-PHP生成ECDSA算法签名
<?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"') 来转一下格式
IOS订阅优惠-PHP生成ECDSA算法签名的更多相关文章
- iOS适配HTTPS,创建一个自签名的SSL证书(x509)具体步骤
引言(创建生成的证书只能用于测试使用.如果想使用自签名证书就只能以自己为 CA机构颁发证书,进行双向认证才能使用) 使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的.也就是说,任何人都 ...
- Android APK生成证书并签名方法
Android APK生成证书并签名方法 android cordova keystore android证书签名 阅读:925 时间:2018年09月20日 Android开发者可能对此很熟悉.使用 ...
- [BS-28] iOS中分页的几种算法
iOS中分页的几种算法 总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResult == 0 ? total ...
- Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯
(一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解 ...
- apk反编译(5)用apktool重新生成一个未签名的apk
用apktool反编译apk后,得到一个目录,里面有smali文件,可以对其修改,然后用apktool重新生成一个未签名的apk. 如,把smali文件中的广告部分去掉或改成自己的. 命令如下:与破解 ...
- [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9285001 该系列笔记1-5pdf下载请猛击这里. 本篇博客为斯坦福ML公开 ...
- 可以进行SHA-1,SHA-224,SHA-256,SHA-384,SHA-512五种算法签名的工具类,以及简单说明
import java.security.MessageDigest; public class SignatureSHA { public static String signSHA(String ...
- CS229笔记:生成学习算法
在线性回归.逻辑回归.softmax回归中,学习的结果是\(p(y|x;\theta)\),也就是给定\(x\)的条件下,\(y\)的条件概率分布,给定一个新的输入\(x\),我们求出不同输出的概率, ...
- 生成学习算法(Generative Learning algorithms)
一.引言 前面我们谈论到的算法都是在给定\(x\)的情况下直接对\(p(y|x;\theta)\)进行建模.例如,逻辑回归利用\(h_\theta(x)=g(\theta^T x)\)对\(p(y|x ...
随机推荐
- 「HNOI2014」世界树
题目链接 问题分析 首先观察数据范围可以知道要用虚树.但是要考虑怎么维护原树的距离信息. 如果只有两个关键点,我们可以很方便地找到中点将整棵树划分为两部分.而如果有多个关键点,看起来有效的方法就是多源 ...
- HDU3844Mining Your Own Business
目测某年HNOI,(其实这个题是2011年的WF,hdu上找到的,HNOI2012那个中文题在bzoj和loj上都有,叫矿场搭建,题意几乎一样,数据比较弱,交这份代码也能A). 先讲题解,然后说一些有 ...
- idea如果发生@override is not allowed when implement 错误,可以在Project Structure-Modules中更改Language level,设置为6以上的。
- Nginx 配置443 HTTPS
server { listen 443 ssl; server_name localhost; ssl on; ssl_certificate D://newlingshou//nginx-1.12. ...
- TCP之服务与首部
1. TCP 的服务 TCP 通过下列方式提供可靠性: 应用数据被分割成 TCP 认为最适合发送的数据块.与 UDP 不同,UDP 应用程序产生的数据报长度将保持不变.由 TCP 传递给 IP 的信息 ...
- nginx的请求限制
一.http协议的连接与请求 总结: HTTP请求是建立在一次TCP连接的基础之上. 一次TCP请求至少产生一次HTTP请求. 二.连接限制 limit_conn_module 配置语法: Synta ...
- LC 274. H-Index
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- Fiddler Wireshark 抓包
使用 层次 Fiddler 简单 第七层应用层的 HTTP(S) 协议的包 Wireshark 复杂 第三层网络层的包 注意:Fiddler 只能抓到走系统代理的流量.不走系统代理的流量(比如浏览器选 ...
- java最常见的5个错误
1. Null 的过度使用 避免过度使用 null 值是一个最佳实践.例如,更好的做法是让方法返回空的 array 或者 collection 而不是 null 值,因为这样可以防止程序抛出 Null ...
- JSP 自定义标签的开发流程
1.编写一个实现Tag接口的标签处理器类 package cn.itcast.web.tag; import java.io.IOException; import javax.servlet.htt ...