導入Postman後
選取左側 Giffgaff 資料夾
選取右側 Authorization (認證)
拉到底按 Get New Access Token (取得新權杖)
跟著網頁登入 Giffgaff 帳號
如果登入有成功
在 MANAGE ACCESS TOKEN 的視窗裡按下 Use Token (使用權杖)
之後依序選取左邊的要求
按下右邊藍色的Send(發送)
在"檢查郵件認證碼 Verify Email code"的步驟裡
把網址的code=000000中的000000換成電郵裡的驗證碼
再按下Send
依序做到最後一步即可看到 eSIM 的 QRCode
{"collection":{"info":{"_postman_id":"6611400c-afe6-49b3-851e-2a4ad221b91d","name":"Giffgaff-swap-esim_20240906a","description":"本脚本可以将GiffGaff的实体SIM卡转换为ESIM,无需借助支持ESIM的手机。\n\n☞[教程](https://azhu.site/posts/1015/)\n\n---\n\n原脚本由 [pwrli](https://www.nodeseek.com/post-76162-1) 大佬提供。由于原脚本中多处API改变了传递参数的方法,原脚本需多处手动操作才能正常使用。为了便利普通使用者,[阿猪](https://azhu.site/)在在原脚本的基础上做了少许修改以适配API的变化。","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json","updatedAt":"2024-09-06T13:13:42.000Z","createdAt":"2024-09-06T13:07:14.000Z","lastUpdatedBy":"38064588","uid":"38064588-6611400c-afe6-49b3-851e-2a4ad221b91d"},"item":[{"name":"發送認證郵件 Send Email Verification","event":[{"listen":"test","script":{"exec":["pm.collectionVariables.set(\"email_code_ref\", pm.response.json().ref);"],"type":"text/javascript","id":"9239ca5e-35d8-42e9-be38-5ac69b55913d"}}],"id":"78499bf0-bc1f-4ea6-b0f4-5bb2a72b6121","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\t\"source\": \"esim\",\r\n\t\"preferredChannels\": [\"EMAIL\"]\r\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://id.giffgaff.com/v4/mfa/challenge/me","protocol":"https","host":["id","giffgaff","com"],"path":["v4","mfa","challenge","me"]}},"response":[],"uid":"38064588-78499bf0-bc1f-4ea6-b0f4-5bb2a72b6121"},{"name":"檢查郵件認證碼 Verify Email code","event":[{"listen":"test","script":{"exec":["pm.collectionVariables.set(\"email_signature\", pm.response.json().signature);"],"type":"text/javascript","packages":{},"id":"1468cfa9-2c18-4ff5-9ab8-10514699f653"}},{"listen":"prerequest","script":{"exec":[],"type":"text/javascript","packages":{},"id":"18a59560-bee8-44f2-9098-31edd8bdddb5"}}],"id":"b9e3d2c6-4e33-4e23-9929-4bdda7b9ea5e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\t\"ref\": \"{{email_code_ref}}\",\r\n\t\"code\": \"\"\r\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://id.giffgaff.com/v4/mfa/validation","protocol":"https","host":["id","giffgaff","com"],"path":["v4","mfa","validation"]}},"response":[],"uid":"38064588-b9e3d2c6-4e33-4e23-9929-4bdda7b9ea5e"},{"name":"取得會員資訊 Get Member","event":[{"listen":"test","script":{"exec":["pm.collectionVariables.set(\"memberId\", pm.response.json().data.memberProfile.id);\r",""],"type":"text/javascript","id":"30bab3dd-59fa-45c7-818a-a4f7230a67a2"}},{"listen":"prerequest","script":{"exec":["console.log(pm.collectionVariables.get(\"email_signature\"))\r","if(pm.collectionVariables.get(\"email_signature\")==null || pm.collectionVariables.get(\"email_signature\")== \"\"){\r"," console.error(\"Email 尚未驗證\");\r"," throw new Error(\"Email 尚未驗證\");\r","}"],"type":"text/javascript","id":"631cb281-db0b-4bf7-8c2c-b9d0e88c1c07"}}],"id":"cd716afe-02fd-4189-ab09-9bddb60005f0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"graphql","graphql":{"query":"query getMemberProfileAndSim {\r\n memberProfile {\r\n id\r\n memberName\r\n __typename\r\n }\r\n sim {\r\n phoneNumber\r\n status\r\n __typename\r\n }\r\n}\r\n","variables":""}},"url":{"raw":"https://publicapi.giffgaff.com/gateway/graphql","protocol":"https","host":["publicapi","giffgaff","com"],"path":["gateway","graphql"]}},"response":[],"uid":"38064588-cd716afe-02fd-4189-ab09-9bddb60005f0"},{"name":"申請 SIM卡 Reserve SIM","event":[{"listen":"test","script":{"exec":["pm.collectionVariables.set(\"esim_ssn\", pm.response.json().data.reserveESim.esim.ssn);\r","pm.collectionVariables.set(\"esim_activation_code\", pm.response.json().data.reserveESim.esim.activationCode);\r",""],"type":"text/javascript","packages":{},"id":"6e8de18c-948c-4d1c-af74-f4dc345c4edd"}}],"id":"c1251ef9-ef90-4273-9c84-c1fb52934e1a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-gg-app-os","value":"Android","type":"text"},{"key":"x-gg-app-os-version","value":"14","type":"text"},{"key":"x-gg-app-build-number","value":"763","type":"text"},{"key":"x-gg-app-device-manufacturer","value":"Google","type":"text"},{"key":"x-gg-app-device-model","value":"Pixel8","type":"text"},{"key":"x-gg-app-version","value":"14.0.8","type":"text"}],"body":{"mode":"graphql","graphql":{"query":"mutation reserveESim($input: ESimReservationInput!) {\r\n reserveESim: reserveESim(input: $input) {\r\n id\r\n memberId\r\n reservationStartDate\r\n reservationEndDate\r\n status\r\n esim {\r\n ssn\r\n activationCode\r\n deliveryStatus\r\n associatedMemberId\r\n __typename\r\n }\r\n __typename\r\n }\r\n}\r\n","variables":"{\r\n \"input\": {\r\n\t\t\"memberId\": \"\",\r\n\t\t\"userIntent\": \"SWITCH\"\r\n\t}\r\n}"}},"url":{"raw":"https://publicapi.giffgaff.com/gateway/graphql","protocol":"https","host":["publicapi","giffgaff","com"],"path":["gateway","graphql"]}},"response":[],"uid":"38064588-c1251ef9-ef90-4273-9c84-c1fb52934e1a"},{"name":"申請交換eSIM Swap SIM","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","id":"21f81305-2a49-44dc-b66d-4c86bcada849"}},{"listen":"prerequest","script":{"exec":[""],"type":"text/javascript","id":"c29f6d57-95c3-4230-a618-f81719cc6225"}}],"id":"bb3e2f0e-6d6e-473f-8bd1-4c041636e506","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-gg-app-os","value":"iOS","type":"text"},{"key":"x-gg-app-os-version","value":"14","type":"text"},{"key":"x-gg-app-build-number","value":"722","type":"text"},{"key":"x-gg-app-device-manufacturer","value":"apple","type":"text"},{"key":"x-gg-app-device-model","value":"iphone15","type":"text"},{"key":"x-gg-app-version","value":"13.21.2","type":"text"}],"body":{"mode":"graphql","graphql":{"query":"mutation SwapSim($activationCode: String!, $mfaSignature: String!) {\r\n swapSim(activationCode: $activationCode, mfaSignature: $mfaSignature) {\r\n old {\r\n ssn\r\n activationCode\r\n __typename\r\n }\r\n new {\r\n ssn\r\n activationCode\r\n __typename\r\n }\r\n __typename\r\n }\r\n}\r\n","variables":"{\r\n\t\"activationCode\": \"{{esim_activation_code}}\",\r\n\t\"mfaSignature\": \"{{email_signature}}\"\r\n}"}},"url":{"raw":"https://publicapi.giffgaff.com/gateway/graphql","protocol":"https","host":["publicapi","giffgaff","com"],"path":["gateway","graphql"]}},"response":[],"uid":"38064588-bb3e2f0e-6d6e-473f-8bd1-4c041636e506"},{"name":"取得eSIM Get ESIMs","id":"48d7badf-3053-405e-bc9f-d453a1e1f1c6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-gg-app-os","value":"iOS","type":"text"},{"key":"x-gg-app-os-version","value":"14","type":"text"},{"key":"x-gg-app-build-number","value":"722","type":"text"},{"key":"x-gg-app-device-manufacturer","value":"apple","type":"text"},{"key":"x-gg-app-device-model","value":"iphone15","type":"text"},{"key":"x-gg-app-version","value":"13.21.2","type":"text"}],"body":{"mode":"graphql","graphql":{"query":"query getESims($deliveryStatus: ESimDeliveryStatus!) {\r\n eSims(deliveryStatus: $deliveryStatus) {\r\n ssn\r\n __typename\r\n }\r\n}\r\n","variables":"{\r\n\t\"deliveryStatus\": \"DOWNLOADABLE\"\r\n}"}},"url":{"raw":"https://publicapi.giffgaff.com/gateway/graphql","protocol":"https","host":["publicapi","giffgaff","com"],"path":["gateway","graphql"]}},"response":[],"uid":"38064588-48d7badf-3053-405e-bc9f-d453a1e1f1c6"},{"name":"取得eSIM下載碼 Get ESIM Token","event":[{"listen":"test","script":{"exec":["pm.collectionVariables.set(\"lpa_string\", pm.response.json().data.eSimDownloadToken.lpaString);"],"type":"text/javascript","id":"a59dc2a0-e3be-48a6-b4bc-d657f9e8a464"}}],"id":"a7c497c1-712b-4c6e-8116-27607257f92b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-gg-app-os","value":"iOS","type":"text"},{"key":"x-gg-app-os-version","value":"14","type":"text"},{"key":"x-gg-app-build-number","value":"722","type":"text"},{"key":"x-gg-app-device-manufacturer","value":"apple","type":"text"},{"key":"x-gg-app-device-model","value":"iphone15","type":"text"},{"key":"x-gg-app-version","value":"13.21.2","type":"text"}],"body":{"mode":"graphql","graphql":{"query":"query eSimDownloadToken($ssn: String!) {\r\n eSimDownloadToken(ssn: $ssn) {\r\n id\r\n host\r\n matchingId\r\n lpaString\r\n __typename\r\n }\r\n}\r\n","variables":"{\r\n\t\"ssn\": \"{{esim_ssn}}\"\r\n}"}},"url":{"raw":"https://publicapi.giffgaff.com/gateway/graphql","protocol":"https","host":["publicapi","giffgaff","com"],"path":["gateway","graphql"]}},"response":[],"uid":"38064588-a7c497c1-712b-4c6e-8116-27607257f92b"},{"name":"產生QRCode Get ESIM QRCode","id":"d463bdb7-46f7-4810-9939-f6f1d0e2a034","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Accept","value":"image/svg+xml","type":"text"},{"key":"X-QR-Width","value":"400","type":"text","disabled":true},{"key":"X-QR-Height","value":"400","type":"text","disabled":true}],"body":{"mode":"raw","raw":"{{lpa_string}}","options":{"raw":{"language":"text"}}},"url":{"raw":"https://qrcode.show/","protocol":"https","host":["qrcode","show"],"path":[""]}},"response":[],"uid":"38064588-d463bdb7-46f7-4810-9939-f6f1d0e2a034"}],"auth":{"type":"oauth2","oauth2":[{"key":"refreshRequestParams","value":[],"type":"any"},{"key":"tokenRequestParams","value":[],"type":"any"},{"key":"authRequestParams","value":[],"type":"any"},{"key":"tokenName","value":"Giffgaff","type":"string"},{"key":"challengeAlgorithm","value":"S256","type":"string"},{"key":"state","value":"cd34c1ef-f1c7-4d5c-8030-bf9753a2ccd5","type":"string"},{"key":"scope","value":"read","type":"string"},{"key":"redirect_uri","value":"giffgaff://auth/callback/","type":"string"},{"key":"grant_type","value":"authorization_code_with_pkce","type":"string"},{"key":"clientSecret","value":"OQv4cfiyol8TvCW4yiLGj0c1AkTR3N2JfRzq7XGqMxk=","type":"string"},{"key":"clientId","value":"4a05bf219b3985647d9b9a3ba610a9ce","type":"string"},{"key":"authUrl","value":"https://id.giffgaff.com/auth/oauth/authorize","type":"string"},{"key":"addTokenTo","value":"header","type":"string"},{"key":"client_authentication","value":"header","type":"string"},{"key":"accessTokenUrl","value":"https://id.giffgaff.com/auth/oauth/token","type":"string"}]},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"b334eb3d-8fe2-4117-bfae-93f59d0ad3f5"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"b9f11f8e-c968-4cda-a0d4-1fa1512f7a6e"}}],"variable":[{"key":"memberId","value":""},{"key":"esim_ssn","value":""},{"key":"esim_activation_code","value":""},{"key":"email_code_ref","value":""},{"key":"email_signature","value":""},{"key":"lpa_string","value":""},{"key":"email_code","value":""}]}}