{"id":288,"date":"2023-12-03T23:45:59","date_gmt":"2023-12-03T14:45:59","guid":{"rendered":"https:\/\/shugomatsuzawa.com\/techblog\/?p=288"},"modified":"2023-12-03T23:46:00","modified_gmt":"2023-12-03T14:46:00","slug":"passgenerator%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%80%81laravel%e3%81%a7%e3%80%8capple-wallet%e3%81%ab%e8%bf%bd%e5%8a%a0%e3%80%8d%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/shugomatsuzawa.com\/techblog\/2023\/12\/03\/288\/","title":{"rendered":"Passgenerator\u3092\u4f7f\u3063\u3066\u3001Laravel\u3067\u300cApple Wallet\u306b\u8ffd\u52a0\u300d\u3059\u308b"},"content":{"rendered":"\n<p>Apple Watch\u30e6\u30fc\u30b6\u30fc\u3068\u3044\u3046\u3053\u3068\u3082\u3042\u308aApple\u30a6\u30a9\u30ec\u30c3\u30c8\u304c\u3042\u307e\u308a\u306b\u4fbf\u5229\u3059\u304e\u308b\u306e\u3067\u3001\u5e03\u6559\u306e\u305f\u3081\u81ea\u5206\u3067\u3082\u4f5c\u3063\u3066\u307f\u305f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Passgenerator\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/thenextweb\/passgenerator\/blob\/master\/README.md\" data-type=\"link\" data-id=\"https:\/\/github.com\/thenextweb\/passgenerator\/blob\/master\/README.md\" target=\"_blank\">Passgenerator\u306e<code>README<\/code><\/a>\u3092\u898b\u306a\u304c\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>composer require thenextweb\/passgenerator<\/code><\/pre>\n\n\n\n<p><code>config\/app.php<\/code>\u306b\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>'providers' =&gt; &#91;\n\/\/ ...\n    Thenextweb\\PassGeneratorServiceProvider::class,\n],<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u8a3c\u660e\u66f8\u306e\u6e96\u5099<\/h2>\n\n\n\n<p>Apple Developer\u30a2\u30ab\u30a6\u30f3\u30c8\u306eWeb\u30b5\u30a4\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001<a rel=\"noreferrer noopener\" href=\"https:\/\/developer.apple.com\/account\/resources\/identifiers\/list\" data-type=\"link\" data-id=\"https:\/\/developer.apple.com\/account\/resources\/identifiers\/list\" target=\"_blank\">ID\u30da\u30fc\u30b8<\/a>\u3078\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"302\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b5b81215740cdf730fa5f58e95af0312-1024x302.png\" alt=\"\" class=\"wp-image-300\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b5b81215740cdf730fa5f58e95af0312-1024x302.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b5b81215740cdf730fa5f58e95af0312-300x88.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b5b81215740cdf730fa5f58e95af0312-768x226.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b5b81215740cdf730fa5f58e95af0312-1536x453.png 1536w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b5b81215740cdf730fa5f58e95af0312-2048x604.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u8ffd\u52a0\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001Pass Type IDs\u3092\u9078\u629e\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"948\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1bf4abf2fc82f9cfd3890bd79a8ce832-1024x948.png\" alt=\"\" class=\"wp-image-301\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1bf4abf2fc82f9cfd3890bd79a8ce832-1024x948.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1bf4abf2fc82f9cfd3890bd79a8ce832-300x278.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1bf4abf2fc82f9cfd3890bd79a8ce832-768x711.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1bf4abf2fc82f9cfd3890bd79a8ce832-1536x1423.png 1536w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1bf4abf2fc82f9cfd3890bd79a8ce832-2048x1897.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Description\u3068Identifier\u3092\u5165\u529b\u3059\u308b\u3002<br>Identifier\u306f<code>pass.<\/code>\u304b\u3089\u59cb\u307e\u308a\u3001\u305d\u306e\u3042\u3068\u306f\u9006\u30c9\u30e1\u30a4\u30f3\u540d\u30b9\u30bf\u30a4\u30eb\u306b\u306a\u308b\u3002\uff08\u4f8b\uff1a<code>pass.com.example.appname<\/code>\uff09<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"309\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b0471fb992b7b7beb1e355c010cd2a13-1024x309.png\" alt=\"\" class=\"wp-image-302\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b0471fb992b7b7beb1e355c010cd2a13-1024x309.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b0471fb992b7b7beb1e355c010cd2a13-300x91.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b0471fb992b7b7beb1e355c010cd2a13-768x232.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b0471fb992b7b7beb1e355c010cd2a13-1536x464.png 1536w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/b0471fb992b7b7beb1e355c010cd2a13-2048x619.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u6b21\u306bID\u306e\u7de8\u96c6\u753b\u9762\u306b\u79fb\u52d5\u3057\u3001Create Certificate\u3092\u30af\u30ea\u30c3\u30af\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"366\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1cbe77e8cc18cf5a33ba9bc9acf04ded-1024x366.png\" alt=\"\" class=\"wp-image-303\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1cbe77e8cc18cf5a33ba9bc9acf04ded-1024x366.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1cbe77e8cc18cf5a33ba9bc9acf04ded-300x107.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1cbe77e8cc18cf5a33ba9bc9acf04ded-768x275.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1cbe77e8cc18cf5a33ba9bc9acf04ded-1536x550.png 1536w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/1cbe77e8cc18cf5a33ba9bc9acf04ded-2048x733.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u8a3c\u660e\u66f8\u7f72\u540d\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3001Mac\u306e<a rel=\"noreferrer noopener\" href=\"https:\/\/developer.apple.com\/jp\/help\/account\/create-certificates\/create-a-certificate-signing-request\/\" data-type=\"link\" data-id=\"https:\/\/developer.apple.com\/jp\/help\/account\/create-certificates\/create-a-certificate-signing-request\/\" target=\"_blank\">\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u30a2\u30af\u30bb\u30b9\u3067\u4f5c\u6210<\/a>\u3059\u308b<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e7c724512b563a5c9d58ba5f2540a6f1-1024x550.png\" alt=\"\" class=\"wp-image-305\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e7c724512b563a5c9d58ba5f2540a6f1-1024x550.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e7c724512b563a5c9d58ba5f2540a6f1-300x161.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e7c724512b563a5c9d58ba5f2540a6f1-768x412.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e7c724512b563a5c9d58ba5f2540a6f1-1536x824.png 1536w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e7c724512b563a5c9d58ba5f2540a6f1-2048x1099.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u30a2\u30af\u30bb\u30b9\u3092\u958b\u3044\u305f\u3089\u3001\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u304b\u3089\u300c\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u30a2\u30af\u30bb\u30b9\u300d\uff1e\u300c\u8a3c\u660e\u66f8\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u300d\uff1e\u300c\u8a8d\u8a3c\u5c40\u306b\u8a3c\u660e\u66f8\u3092\u8981\u6c42\u300d\u3092\u9078\u629e\u3002<\/p>\n\n\n\n<p>\u30e6\u30fc\u30b6\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3068\u901a\u79f0\u3092\u5165\u529b\u3057\u305f\u3089\u3001\u30c7\u30a3\u30b9\u30af\u306b\u4fdd\u5b58\u3092\u9078\u629e\u3002<br>\u51fa\u3066\u304d\u305fCertificateSigningRequest.certSigningRequest\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3068\u3001pass.cer\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"779\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e336a714843103dadf50833da24ff6a5-1-1024x779.png\" alt=\"\" class=\"wp-image-316\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e336a714843103dadf50833da24ff6a5-1-1024x779.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e336a714843103dadf50833da24ff6a5-1-300x228.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e336a714843103dadf50833da24ff6a5-1-768x584.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/e336a714843103dadf50833da24ff6a5-1.png 1456w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Passgenerator\u3067\u4f7f\u3046\u306b\u306f\u3001\u3053\u306epass.cer\u3092.p12\u30d5\u30a1\u30a4\u30eb\u306b\u5909\u63db\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<br>pass.cer\u3092\u518d\u5ea6\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u30a2\u30af\u30bb\u30b9\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u3001\u79d8\u5bc6\u9375\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u3002<br>\u3053\u306e\u6642\u8a2d\u5b9a\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30e1\u30e2\u3057\u3066\u304a\u304f\u3053\u3068\u3002<\/p>\n\n\n\n<p>\u3082\u3046\u4e00\u3064\u3001Apple Worldwide Developer Relations Intermediate Certificate\u304c\u5fc5\u8981\u3002<br>\u3053\u308c\u306f\u30a2\u30d7\u30ea\u958b\u767a\u8005\u306a\u3089\u3059\u3067\u306b\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u30a2\u30af\u30bb\u30b9\u306b\u5165\u3063\u3066\u3044\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u3001\u3082\u3057\u306a\u3051\u308c\u3070<a rel=\"noreferrer noopener\" href=\"https:\/\/www.apple.com\/certificateauthority\/\" data-type=\"link\" data-id=\"https:\/\/www.apple.com\/certificateauthority\/\" target=\"_blank\">Apple\u306eWeb\u30b5\u30a4\u30c8<\/a>\u304b\u3089.cer\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3002<br>\u3053\u3061\u3089\u306f\u30ad\u30fc\u30c1\u30a7\u30fc\u30f3\u30a2\u30af\u30bb\u30b9\u304b\u3089.pem\u3067\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"668\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/134970c61fca06f39330f570016e78f9-1024x668.png\" alt=\"\" class=\"wp-image-306\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/134970c61fca06f39330f570016e78f9-1024x668.png 1024w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/134970c61fca06f39330f570016e78f9-300x196.png 300w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/134970c61fca06f39330f570016e78f9-768x501.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/134970c61fca06f39330f570016e78f9-1536x1002.png 1536w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/134970c61fca06f39330f570016e78f9.png 1978w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a3c\u660e\u66f8\u3092<code>storage\/app\/keys\/<\/code>\u306b\u4fdd\u5b58\u3057\u3001.env\u306b\u6b21\u3092\u8ffd\u52a0\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CERTIFICATE_PATH=\"\/var\/www\/html\/storage\/app\/keys\/Shugo Matsuzawa Dev Key.p12\" #p12\u8a3c\u660e\u66f8\u306e\u7d76\u5bfe\u30d1\u30b9\nCERTIFICATE_PASS=\"password\" #p12\u8a3c\u660e\u66f8\u4f5c\u6210\u5b57\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\nWWDR_CERTIFICATE=\"\/var\/www\/html\/storage\/app\/keys\/Apple Worldwide Developer Relations Certification Authority.pem\" #WWDR\u306e\u7d76\u5bfe\u30d1\u30b9<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u30d1\u30b9\u3092\u767a\u884c\u3057\u3066\u307f\u308b<\/h2>\n\n\n\n<p>Jetstream\u3067\u4f1a\u54e1\u767b\u9332\u3059\u308b\u3068\u3001ID\u306e\u5165\u3063\u305fQR\u30b3\u30fc\u30c9\u3092\u767a\u884c\u3059\u308b\u30c7\u30e2\u3092\u4f5c\u3063\u3066\u307f\u305f\u3002<br>\u8a73\u3057\u304f\u306f<a href=\"https:\/\/github.com\/shugomatsuzawa\/Laravel-DEMO-Pass\" data-type=\"link\" data-id=\"https:\/\/github.com\/shugomatsuzawa\/Laravel-DEMO-Pass\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub\u3092\u898b\u3066\u307b\u3057\u3044<\/a>\u3002<br>\u3053\u308c\u3067\u30a6\u30a9\u30ec\u30c3\u30c8\u30d1\u30b9\u3092\u767a\u884c\u3057\u3066\u307f\u308b\u3002<\/p>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u3002<br><code>app\/Http\/Controllers\/DashboardController.php<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Thenextweb\\PassGenerator;\nuse App\\Services\\DashboardService;\nuse Response;\n\nclass DashboardController extends Controller\n{\n    public function index()\n    {\n        return view('dashboard');\n    }\n\n    public function pass()\n    {\n        $dashboardService = new DashboardService();\n\n        $pass_identifier = auth()-&gt;id();  \/\/ This, if set, it would allow for retrieval later on of the created Pass\n        $pkpass = PassGenerator::getPass($pass_identifier);\n        if (!$pkpass) {\n            $pkpass = $dashboardService-&gt;createWalletPass($pass_identifier);\n        }\n\n        $filePath = storage_path('app\/passgenerator') . '\/' . $pass_identifier . '.pkpass';\n        $fileName = 'pass.pkpass';\n        $headers = &#91;\n            'Content-Type' =&gt; PassGenerator::getPassMimeType(),\n        ];\n        return response()-&gt;download($filePath, $fileName, $headers);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u30d1\u30b9\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u90e8\u5206\u3060\u304c\u3001Passgenerator\u306eREADME\u901a\u308a\u306b\u3084\u308b\u3068\u3046\u307e\u304f\u3044\u304b\u306a\u304b\u3063\u305f\u3002<br>\u3067\u3082\u30d1\u30b9\u81ea\u4f53\u306f<code>storage\/app\/passgenerator\/<\/code>\u306b\u751f\u6210\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\uff08\u5f8c\u8ff0\uff09\u305d\u308c\u3092\u666e\u901a\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u305f\u3002<br><code>app\/Services\/DashboardService.php<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Services;\n\nuse Thenextweb\\PassGenerator;\n\nclass DashboardService\n{\n    public function createWalletPass($pass_identifier)\n    {\n        $pass = new PassGenerator($pass_identifier);\n\n        $pass_definition = &#91;\n            \"formatVersion\"     => 1,\n            \"passTypeIdentifier\"=> \"pass.com.shugomatsuzawa.demo\",\n            \"serialNumber\"      => (string)auth()->id(),\n            \"teamIdentifier\"    => \"0000AA0000\", \/\/ https:\/\/developer.apple.com\/account \u306b\u8f09\u3063\u3066\u3044\u308b\n\n            \"organizationName\"  => \"\u30aa\u30fc\u30ac\u30cb\u30c3\u30af\u30d7\u30ed\u30c7\u30e5\u30fc\u30b9\",\n            \"description\"       => \"\u30aa\u30fc\u30ac\u30cb\u30c3\u30af\u30d7\u30ed\u30c7\u30e5\u30fc\u30b9 \u30ed\u30a4\u30e4\u30ea\u30c6\u30a3\u30ab\u30fc\u30c9\",\n            \"logoText\"          => \"Organic Produce\",\n            \"foregroundColor\"   => \"rgb(255, 255, 255)\",\n            \"backgroundColor\"   => \"rgb(55, 117, 50)\",\n\n            \"barcode\" => &#91;\n                \"message\"   => (string)auth()->id(),\n                \"format\"    => \"PKBarcodeFormatQR\",\n                \"messageEncoding\"=> \"utf-8\",\n            ],\n\n            \"storeCard\" => &#91;\n                \"headerFields\" => &#91;\n                    &#91;\n                        \"key\" => \"label\",\n                        \"value\" => \"DEMO\",\n                    ],\n                ],\n                \"primaryFields\" => &#91;\n                    &#91;\n                        \"key\" => \"member_name\",\n                        \"value\" => auth()->user()->name,\n                    ],\n                ],\n                \"auxiliaryFields\" => &#91;\n                    &#91;\n                        \"key\" => \"member_id\",\n                        \"label\" => \"\u4f1a\u54e1\u756a\u53f7\",\n                        \"value\" => (string)auth()->id(),\n                    ],\n                    &#91;\n                        \"key\" => \"member_since\",\n                        \"label\" => \"\u3054\u767b\u9332\",\n                        \"value\" => auth()->user()->created_at->format('Y\u5e74m\u6708'),\n                    ],\n                ],\n                \"backFields\" => &#91;\n                    &#91;\n                        \"key\" => \"phone\",\n                        \"label\" => \"\u96fb\u8a71\",\n                        \"value\" => \"+81 3 1234 5678\"\n                    ], &#91;\n                        \"key\" => \"website\",\n                        \"label\" => \"\u30b5\u30dd\u30fc\u30c8Web\u30b5\u30a4\u30c8\",\n                        \"value\" => \"https:\/\/shugomatsuzawa.com\"\n                    ], &#91;\n                        \"key\" => \"privacy\",\n                        \"label\" => \"\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u30dd\u30ea\u30b7\u30fc\",\n                        \"value\" => \"https:\/\/shugomatsuzawa.com\/privacy\/\"\n                    ], &#91;\n                        \"key\" => \"terms\",\n                        \"label\" => \"\u5229\u7528\u898f\u7d04\",\n                        \"value\" => \"\u3053\u306e\u5229\u7528\u898f\u7d04\uff08\u4ee5\u4e0b\u3001\u300c\u672c\u898f\u7d04\u300d\u3068\u3044\u3044\u307e\u3059\uff09\u306f\u3001&#91;\u304a\u5e97\u306e\u540d\u524d]\uff08\u4ee5\u4e0b\u3001\u300c\u5f53\u5e97\u300d\u3068\u3044\u3044\u307e\u3059\uff09\u304c\u63d0\u4f9b\u3059\u308b\u4f1a\u54e1\u8a3c\u30b5\u30fc\u30d3\u30b9\uff08\u4ee5\u4e0b\u3001\u300c\u672c\u30b5\u30fc\u30d3\u30b9\u300d\u3068\u3044\u3044\u307e\u3059\uff09\u306b\u95a2\u3059\u308b\u6761\u4ef6\u3092\u898f\u5b9a\u3057\u307e\u3059\u3002\u672c\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3059\u308b\u969b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u898f\u7d04\u306b\u540c\u610f\u3057\u3066\u3044\u305f\u3060\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\\n\\n1. \u4f1a\u54e1\u8cc7\u683c\\n1.1. \u672c\u30b5\u30fc\u30d3\u30b9\u306e\u5229\u7528\u8cc7\u683c\u306f\u3001&#91;\u6761\u4ef6\u3092\u8a18\u8f09]\u3068\u306a\u308a\u307e\u3059\u3002\\n1.2. \u4f1a\u54e1\u306f\u3001\u672c\u30b5\u30fc\u30d3\u30b9\u3092\u4ed6\u8005\u306b\u8b72\u6e21\u30fb\u79fb\u8ee2\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\\n\\n2. \u4f1a\u54e1\u8a3c\u306e\u767a\u884c\u3068\u5229\u7528\\n2.1. \u4f1a\u54e1\u8a3c\u306f&#91;\u767a\u884c\u6761\u4ef6\u3092\u8a18\u8f09]\u306b\u57fa\u3065\u304d\u3001\u5f53\u5e97\u304c\u767a\u884c\u3057\u307e\u3059\u3002\\n2.2. \u4f1a\u54e1\u8a3c\u306f\u672c\u4eba\u306e\u307f\u304c\u5229\u7528\u3067\u304d\u3001\u4ed6\u8005\u306b\u8cb8\u4e0e\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\\n\\n3. \u30dd\u30a4\u30f3\u30c8\u304a\u3088\u3073\u7279\u5178\\n3.1. \u4f1a\u54e1\u306f\u3001\u672c\u30b5\u30fc\u30d3\u30b9\u306e\u5229\u7528\u306b\u4f34\u3044\u3001\u30dd\u30a4\u30f3\u30c8\u3084\u7279\u5178\u3092\u4eab\u53d7\u3067\u304d\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6761\u4ef6\u306f\u968f\u6642\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\\n3.2. \u30dd\u30a4\u30f3\u30c8\u3084\u7279\u5178\u306f\u3001&#91;\u5229\u7528\u6761\u4ef6\u3084\u671f\u9650\u3092\u8a18\u8f09]\u306b\u57fa\u3065\u304d\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\\n\\n4. \u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u3068\u500b\u4eba\u60c5\u5831\\n4.1. \u4f1a\u54e1\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u3068\u500b\u4eba\u60c5\u5831\u306f\u3001\u5f53\u5e97\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u30dd\u30ea\u30b7\u30fc\u306b\u57fa\u3065\u304d\u53d6\u308a\u6271\u308f\u308c\u307e\u3059\u3002\\n\\n5. \u4f1a\u54e1\u8a3c\u306e\u7d1b\u5931\u30fb\u76d7\u96e3\\n5.1. \u4f1a\u54e1\u306f\u3001\u4f1a\u54e1\u8a3c\u306e\u7d1b\u5931\u30fb\u76d7\u96e3\u304c\u3042\u3063\u305f\u5834\u5408\u3001\u76f4\u3061\u306b\u5f53\u5e97\u306b\u5831\u544a\u3059\u308b\u8cac\u4efb\u304c\u3042\u308a\u307e\u3059\u3002\\n\\n6. \u672c\u898f\u7d04\u306e\u5909\u66f4\\n6.1. \u5f53\u5e97\u306f\u3001\u672c\u898f\u7d04\u3092\u968f\u6642\u5909\u66f4\u3067\u304d\u308b\u3082\u306e\u3068\u3057\u3001\u5909\u66f4\u5f8c\u306e\u898f\u7d04\u306f\u672c\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u4e0a\u3067\u63b2\u793a\u3055\u308c\u305f\u6642\u70b9\u3067\u52b9\u529b\u3092\u767a\u751f\u3057\u307e\u3059\u3002\\n\\n7. \u30b5\u30fc\u30d3\u30b9\u306e\u7d42\u4e86\\n7.1. \u5f53\u5e97\u306f\u4e88\u544a\u306a\u304f\u672c\u30b5\u30fc\u30d3\u30b9\u3092\u7d42\u4e86\u3059\u308b\u6a29\u5229\u3092\u6709\u3057\u307e\u3059\u3002\\n\\n8. \u514d\u8cac\u4e8b\u9805\\n 8.1. \u5f53\u5e97\u306f\u3001\u672c\u30b5\u30fc\u30d3\u30b9\u306e\u5229\u7528\u306b\u4f34\u3046\u4e00\u5207\u306e\u640d\u5bb3\u3084\u30c8\u30e9\u30d6\u30eb\u306b\u5bfe\u3057\u3066\u4e00\u5207\u306e\u8cac\u4efb\u3092\u8ca0\u3044\u307e\u305b\u3093\u3002\\n\\n9. \u305d\u306e\u4ed6\u306e\u6761\u4ef6\\n9.1. \u672c\u898f\u7d04\u306b\u5b9a\u3081\u3089\u308c\u3066\u3044\u306a\u3044\u4e8b\u9805\u306b\u3064\u3044\u3066\u306f\u3001\u95a2\u4fc2\u6cd5\u4ee4\u304a\u3088\u3073\u4e00\u822c\u7684\u306a\u5546\u6163\u7fd2\u306b\u5f93\u3044\u307e\u3059\u3002\\n\\n\u00a9\ufe0eShugo Matsuzawa 2023\"\n                    ]\n                ],\n                \"locations\" => &#91;\n                    &#91;\n                        \"latitude\" => 37.6189722,\n                        \"longitude\" => -122.3748889,\n                    ]\n                ],\n            ],\n        ];\n\n        $pass->setPassDefinition($pass_definition);\n\n        \/\/ Definitions can also be set from a JSON string\n        \/\/ $pass->setPassDefinition(file_get_contents('\/path\/to\/pass.json));\n\n        \/\/ Add assets to the PKPass package\n        $pass->addAsset(base_path('resources\/assets\/wallet\/icon.png'));\n        $pass->addAsset(base_path('resources\/assets\/wallet\/icon@2x.png'));\n        $pass->addAsset(base_path('resources\/assets\/wallet\/logo.png'));\n        $pass->addAsset(base_path('resources\/assets\/wallet\/strip.png'));\n        $pass->addAsset(base_path('resources\/assets\/wallet\/strip@2x.png'));\n\n        $pkpass = $pass->create();\n        return $pkpass;\n    }\n}<\/code><\/pre>\n\n\n\n<p>Apple\u306e<a href=\"https:\/\/developer.apple.com\/services-account\/download?path=\/iOS\/Wallet_Support_Materials\/WalletCompanionFiles.zip\" data-type=\"link\" data-id=\"https:\/\/developer.apple.com\/services-account\/download?path=\/iOS\/Wallet_Support_Materials\/WalletCompanionFiles.zip\">\u30b5\u30f3\u30d7\u30eb\u30d1\u30b9<\/a>\u3092\u5143\u306b\u3057\u3066\u3044\u308b\u3002<br>\u5404\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a73\u7d30\u306f<a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/UserExperience\/Reference\/PassKit_Bundle\/Chapters\/Introduction.html#\/\/apple_ref\/doc\/uid\/TP40012026\" data-type=\"link\" data-id=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/UserExperience\/Reference\/PassKit_Bundle\/Chapters\/Introduction.html#\/\/apple_ref\/doc\/uid\/TP40012026\" target=\"_blank\" rel=\"noreferrer noopener\">Apple\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u304c\u53c2\u8003\u306b\u306a\u308b\u3002<\/p>\n\n\n\n<p>\u5b8c\u6210\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306a\u30d1\u30b9\u304c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" src=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image-472x1024.png\" alt=\"\" class=\"wp-image-311\" srcset=\"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image-472x1024.png 472w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image-138x300.png 138w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image-768x1665.png 768w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image-709x1536.png 709w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image-945x2048.png 945w, https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/image.png 1179w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">\u906d\u9047\u3057\u305f\u30d0\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/thenextweb\/passgenerator\/issues\/18\" data-type=\"link\" data-id=\"https:\/\/github.com\/thenextweb\/passgenerator\/issues\/18\" target=\"_blank\" rel=\"noreferrer noopener\">&#8220;Disk [passgenerator] does not have a configured driver.&#8221;<\/a>\uff082023\/11\/26\u6642\u70b9\uff09<\/h3>\n\n\n\n<p>\u4eca\u306e\u3068\u3053\u308dconfig\/filesystems.php\u306bpassgenerator\u30c7\u30a3\u30b9\u30af\u3092\u8ffd\u52a0\u3059\u308b\u3057\u304b\u306a\u3044\u3089\u3057\u3044\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    'disks' =&gt; &#91;\n\n        ...\u7701\u7565...\n\n        'passgenerator' =&gt; &#91;\n            'driver' =&gt; 'local',\n            'root' =&gt; storage_path('app\/passgenerator'),\n        ],\n\n    ],<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/thenextweb\/passgenerator\/issues\/45\" data-type=\"link\" data-id=\"https:\/\/github.com\/thenextweb\/passgenerator\/issues\/45\" target=\"_blank\">message : &#8220;error:0308010C:digital envelope routines::unsupported&#8221;<\/a>\uff082023\/11\/26\u6642\u70b9\uff09<\/h3>\n\n\n\n<p>Laravel Sail\u30b3\u30f3\u30c6\u30ca\u306eUbuntu\u304copenssl 3\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u30ec\u30ac\u30b7\u30fc\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<\/p>\n\n\n\n<p>Dockerfile\u3092\u4f5c\u6210\u3057\u3001\u4ee5\u4e0b\u3092\u8ffd\u8a18\u3059\u308b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RUN sed -i '\/^default = default_sect\/a legacy = legacy_sect' \/etc\/ssl\/openssl.cnf\nRUN sed -i '\/^\\&#91;default_sect\\]\/a activate = 1' \/etc\/ssl\/openssl.cnf\nRUN printf \"&#91;legacy_sect]\\nactivate = 1\" &gt;&gt; \/etc\/ssl\/openssl.cnf<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u53c2\u8003<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/thenextweb\/passgenerator\" data-type=\"link\" data-id=\"https:\/\/github.com\/thenextweb\/passgenerator\" target=\"_blank\">thenextweb\/passgenerator: A Laravel package to create Apple Wallet passes.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/UserExperience\/Conceptual\/PassKit_PG\/index.html#\/\/apple_ref\/doc\/uid\/TP40012195-CH1-SW1\" data-type=\"link\" data-id=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/UserExperience\/Conceptual\/PassKit_PG\/index.html#\/\/apple_ref\/doc\/uid\/TP40012195-CH1-SW1\" target=\"_blank\" rel=\"noreferrer noopener\">Wallet Developer Guide: Introducing Wallet<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/tech.nri-net.com\/entry\/apple_wallet_and_pass\" data-type=\"link\" data-id=\"https:\/\/tech.nri-net.com\/entry\/apple_wallet_and_pass\" target=\"_blank\" rel=\"noreferrer noopener\">Apple Wallet\u3084Pass\u306b\u3064\u3044\u3066\u8abf\u67fb\u3057\u3001Pass\u3092\u4f5c\u3063\u3066\u307f\u305f &#8211; NRI\u30cd\u30c3\u30c8\u30b3\u30e0Blog<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/stackoverflow.com\/questions\/73832854\/php-openssl-pkcs12-read-error0308010cdigital-envelope-routinesunsupported\/73858615#73858615\" data-type=\"link\" data-id=\"https:\/\/stackoverflow.com\/questions\/73832854\/php-openssl-pkcs12-read-error0308010cdigital-envelope-routinesunsupported\/73858615#73858615\" target=\"_blank\">laravel &#8211; PHP openssl_pkcs12_read &#8220;error:0308010C:digital envelope routines::unsupported&#8221; &#8211; Stack Overflow<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pkpassvalidator.azurewebsites.net\" data-type=\"link\" data-id=\"https:\/\/pkpassvalidator.azurewebsites.net\" target=\"_blank\" rel=\"noreferrer noopener\">PKPassValidator &#8211; validate your pkpass files quickly and easily<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/qiita.com\/hotate_chan\/items\/63db25bdf5f0a7996aaf\" data-type=\"link\" data-id=\"https:\/\/qiita.com\/hotate_chan\/items\/63db25bdf5f0a7996aaf\" target=\"_blank\" rel=\"noreferrer noopener\">Laravel \u3067\u306e\u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u5b9f\u88c5\u3057\u3066\u307f\u305f #PHP &#8211; Qiita<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"Apple Watch\u30e6\u30fc\u30b6\u30fc\u3068\u3044\u3046\u3053\u3068\u3082\u3042\u308aApple\u30a6\u30a9\u30ec\u30c3\u30c8\u304c\u3042\u307e\u308a\u306b\u4fbf\u5229\u3059\u304e\u308b\u306e\u3067\u3001\u5e03\u6559\u306e\u305f\u3081\u81ea\u5206\u3067\u3082\u4f5c\u3063\u3066\u307f\u305f\u3002 Passgenerator\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb Passgenerator\u306eREADME\u3092\u898b\u306a\u304c\u3089\u30a4\u30f3 [&hellip;]","protected":false},"author":1,"featured_media":310,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[39],"tags":[85,84,81,86,53,10],"class_list":["post-288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","tag-apple-wallet","tag-ios","tag-laravel","tag-passgenerator","tag-php","tag-memo"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/shugomatsuzawa.com\/techblog\/wp-content\/uploads\/sites\/3\/2023\/12\/movie-theater-4209087_1920.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/posts\/288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/comments?post=288"}],"version-history":[{"count":18,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/posts\/288\/revisions"}],"predecessor-version":[{"id":317,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/posts\/288\/revisions\/317"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/media\/310"}],"wp:attachment":[{"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/media?parent=288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/categories?post=288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shugomatsuzawa.com\/techblog\/wp-json\/wp\/v2\/tags?post=288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}