Error while trying to add payment card to Apple Wallet - objective-c

Well, I am developing a Cordova plugin to enable users from adding credit/debit cards to thier wallet.
I am using PKAddPaymentPassViewController, not PKAddPassViewController.
I have created the plugin itself successfully, with one method startAddPaymentPass (for now). It takes the following parameters:
{
cardholderName: 'Hamada',
primaryAccountNumberSuffix: '1234567',
localizedDescription: 'Green Travel',
primaryAccountIdentifier: '987654321',
paymentNetwork: 'Visa'
}
I am getting the following error:
missing entitlement: com.apple.developer.payment-pass-provisioning
ERROR: ERROR >> MISSING_ENTITLEME NTS
Could anyone help? Or if anyone interested can contribute building the whole plugin with me.

You need a special entitlement issued by Apple.
Your app must include this entitlement before you can use this class.
For more information on requesting this entitlement, see the Card
Issuers section at developer.apple.com/apple-pay/.
From this answer:
PKAddPaymentPassViewController requires the
com.apple.developer.payment-pass-provisioning entitlement key for your
app. The bad news is that not anyone can submit apps with this
entitlement as it requires special permission from Apple, which I
believe is reserved for card issuers like banks and similar. If you
believe that you qualify you need to contact Apple directly at
apple-pay-inquiries#apple.com

Related

Shopify - inventory_quantity deprecation notification

I am using Shopify Admin REST API for item and inventory sync and I am not sending inventory_quantity field in variants API, but I received following email from Shopify few days ago. I am also sending correct location_id when creating fulfillment and it is created successfully in Shopify.
The location_id field is now required when creating fulfillment and
refund requests.
Inventory_quantity and inventory_quantity_adjustment
can no longer be set on the product variant.
Deprecated in 2019-10 and support will be removed on July 1, 2020
I wanted to know if the email above is a generic email sent by Shopify to all developers? or am I doing something wrong here?
Ignore it if you're sure that you don't use these deprecated attributes anymore. I think they recently introduced this notification system which sends warnings to developers if they detected any deprecated calls in the past. They just alert you, they don't scan your app code so they don't know whether you fixed the issue or not. I was getting similar warnings despite that I was sure that the issue had been fixed earlier.
Anyway, to get peace of mind, go to the Apps area in your Shopify Partners account. The table that lists all your apps has now the API health column showing the status of your apps in terms of deprecated calls. You will see a warning (orange dot) if they detected any deprecated calls in the past 30 days. The warning is provided with some additional information like the last time the issue was detected and the deadline to fix it to, example. You can get more details about the deprecation by clicking on to the warning.
If it's a private app, just check your code again for using the deprecated attributes mentioned in the email.
You will want to check the new Inventory Level and Inventory Item endpoints in the Rest API. With a variant's inventory_item_id and a location ID, you can update inventory.
Clearly you can no longer just set a variant's inventory level. That went the way of the DODO this year.

Confused about the API changes

Since LinkedIn support has moved to StackOverflow... here we go. It might seem like a stupid question though...
The LinkedIn API will move to v2 in the near future, but I am unsure which data will really remain available (without being a LinkedIn Partner).
I have been reading the API v2 documentation. This talks about r_basicprofile (which I have used with v1), but this will be replaced with r_liteprofile. (I quote: "This API will only recognize a new “Lite Profile” permission, which supports a reduced set of member profile fields.")
So, r_liteprofile only has a couple of data fields (first name, last name, maiden name, profile picture). In the future, how am I to get the LinkedIn profile URL from this? And some other information that is not necessarily privacy sensitive?
If I try to get more data through r_liteprofile it doesn't show them, which would be expected behavior according to the r_liteprofile documentation. But how am I supposed to link to people's LinkedIn profile from my application? Doesn't LinkedIn want people to come back to their platform through other websites?
So, in conclusion:
After March 1st, will there still be a way to get the profile URL, and perhaps the headline and industry ID?
The obvious answer is "no you can't". I'm just hoping for a "yes you can".
In short: it's not possible to maintain the r_basicprofile fields without applying for a LinkedIn partnership, starting March 1st, 2019 (when the transition from the LinkedIn API v1 to v2 will be made).
From the migration docs:
"Looking to maintain access to the Basic Profile fields? Learn more about applying to a LinkedIn Partner Program."
https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/migration-faq?context=linkedin/consumer/context#what-are-the-main-differences-with-the-new-sign-in-with-linkedin
You can get more fields by specifying them in url:
https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))
You can find more fields here https://learn.microsoft.com/en-us/linkedin/shared/references/v2/profile

How do I programmatically download my bank transactions from Chase without using a third party?

I'm interested in downloading my transactions from Chase without using a third party such as Mint, Quicken, Yodlee, Plaid, and so on. I don't trust third parties with handling my data, which is why I want to do it myself.
Works as of 1/8/18
Summary
Chase uses OFX to support programmatic interactions with its financial data. It does so somewhat reluctantly however, as this fact isn't widely advertised nor well documented - banks would rather have you use their products directly, rather than go to third parties. That being said, support for desktop products like Quicken still exists, and so one method is to spoof yourself as a desktop product (the other options are to use a third party service or use a screen scraper). Obviously this solution is completely at the mercy of Chase's whims, and as a discouraged access pattern this is not robust. But you're still reading, so let's do this!
Solution
Set up your account to accept connections from Desktop apps
Account > Profile & Settings > Manage Account Security > Desktop apps > Click enable
Generate a Client UID. Chase will use this to verify that the OFX requests it's receiving are intended.
Go to https://www.uuidgenerator.net/ and generate a UID.
Use ofx-ba-tfb.py to POST the following to https://ofx.chase.com. Comments begin with a # sign, do not include them.
Headers:
OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:{Insert random alphanumeric string}
Payload:
<OFX>
<SIGNONMSGSRQV1>
<SONRQ>
<DTCLIENT>20180108012004
<USERID>{Insert user id}
<USERPASS>{Insert password}
<LANGUAGE>ENG
<FI>
<ORG>B1 # Comes from ofxhome.com
<FID>10898
</FI>
<APPID>QWIN
<APPVER>1800
<CLIENTUID>{Insert random alphanumeric string}
</SONRQ>
</SIGNONMSGSRQV1>
<CREDITCARDMSGSRQV1>
<CCSTMTTRNRQ>
<TRNUID>{Insert random alphanumeric string}
<CLTCOOKIE>4
<CCSTMTRQ>
<CCACCTFROM>
<ACCTID>{Insert account id here}
</CCACCTFROM>
<INCTRAN>
<DTSTART>20171208
<INCLUDE>Y
</INCTRAN>
</CCSTMTRQ>
</CCSTMTTRNRQ>
</CREDITCARDMSGSRQV1>
</OFX>
Verify the request
You will get a response that says,
"Please verify your identity within the next 7 days. Using your desktop computer, go to your bank's website and visit the Secure Message Center for instructions." After a small delay (in minutes), you will receive a message in your Secure Message Center asking to confirm that you made this request. Confirm the request. This response and verification happens with each new Client UID you submit.
Make the OFX request again, and you should receive your transactions!
Comments
Many thanks to Harry Sit # thefinancebuff.com for doing most of the work!!
More is possible through OFX, it's a complicated standard. Look to the specification for details.
You can also use GnuCash to see other promising settings.
This is using OFX 1.02, but Chase is now at 2.2
References
https://thefinancebuff.com/replacing-microsoft-money-part-5-ofx-scripts.html#comments
http://www.ofx.net/
http://www.ofxhome.com/
http://www.ofxhome.com/ofxforum/viewtopic.php?id=47456
https://rhye.org/post/parsing-ofx-leex/
since October 5, 2022, Chase disconnected ofx.chase.com and look like you have to go aggregators like Quicken/MD+ to get your data.
As HLE indicates, Chase has killed OFX/DirectConnect as of late Sept./early Oct. 2022. Here are some related articles:
"As of October 6th, 2022, Chase will no longer be supporting Direct Connect/OFX which includes 3rd-party bill pay. Along with some of the other larger financial institutions, Chase has moved to the Open Banking connection method for transaction importing. A link to an article that explains what Open Banking is all about is listed below."
https://www.banktivity.com/support/articles/banktivity-7/ofx-direct-connect-will-no-longer-be-supported-by-chase-as-of-october-6th-2022/
"Chase Bank is changing the way it connects with personal finance management solutions like Quicken. To keep Quicken connected to your Chase account you'll need to switch you connection method on or before September 26, 2022."
https://community.quicken.com/discussion/7916266/quicken-chase-announce-killing-link-to-chase-direct-connect-bill-pay
Possible solutions for Moneydance users:
http://infinitekind.tenderapp.com/discussions/online-banking/23881-chase-bank-accounts-no-longer-can-connect
It sounds like .QXF files contain the same/similar data as .OFX files and the downloading of such files may be scriptable. I will update this answer if I find out more.

Purchase simulation dialog does not show up (CurrentAppSimulator.RequestProductPurchaseAsync)

I was developing an app for Windows 8. After a while I updated the project to Windows 8.1 and I got a warning, that the method CurrentAppSimulator.RequestProductPurchaseAsync(String, Boolean) from the CurrentAppSimulator class is deprecated. So I started using CurrentAppSimulator.RequestProductPurchaseAsync(String) version of it, and for some reason the purchase simulation dialog does not show up at all. Here is a dialog I was getting using deprecated version of the method.
I never needed the WindowsStoreProxy.xml before, but just in case I checked it and set the IsTrial property to false - however, the dialog does not show up, and the answer of the new method CurrentAppSimulator.RequestProductPurchaseAsync(String) always returns ProductPurchaseStatus::NotPurchased.
Maybe someone knows where is the problem?
The NotPurchased is returned, because the file WindowsStoreProxy.xml that is used by CurrentAppSimulator does not contain the requested product. You need to fill WindowsStoreProxy.xml with all the products you are providing to the app user. Here are some examples, written by Microsoft.
WindowsStoreProxy.xml is created on the first launch of the app in this location:
C:\Users\<username>\AppData\Local\Packages\<app package folder>\LocalState\Microsoft\Windows Store\ApiData\WindowsStoreProxy.xml
Also, after every CurrentAppSimulator.RequestProductPurchaseAsync(String) call, when result is ProductPurchaseStatus.Succeeded you need to do two things:
Grant user the product (e.g. purchased item)
Inform Store, that the product fulfillment is completed successfuly - using method CurrentApp.ReportConsumableFulfillmentAsync(String, Guid). Make sure, that the FulfillmentResult that is returned afterwards is FulfillmentResult::Succeeded
After these steps your item should be successfully purchased and fulfilled.
Check out detailed explanation: Enable consumable in-app product purchases.
And if you need more clarification of what each FulfillmentResult means for the purchase, you can look up a really good explanation in the book "Universal Windows Apps with XAML and C# Unleashed" by Adam Nathan, that I found while googling these things.

In iOS 7, how to extract the values of Receipt Fields from the In-App Purchase receipts?

I know that in iOS 7, the app's receipt and the In-App Purchase receipts are combined into an encrypted format with a structure shown here, automatically written to storage.
I know receipt(s) have fields, as documented here.
I know how to retrieve the receipt combo by calling appStoreReceiptURL.
I know how to validate that receipt by passing it to Apple servers either directly or via my own server.
But how do I parse the receipt to extract its fields?
I need some kind of identifier for each of the possible In-App Purchases so as to record the user's ownership in a way that I can verify repeatedly later.
If you send the receipt to Apple for validation, you will get back a JSON structure with all the receipt fields. Are you asking how to parse this JSON structure?
Check the issue: A complete solution to LOCALLY validate an in-app receipts and bundle receipts on iOS 7
In one of the provided answer author described the solution how to unseal PKCS7 container by means of OpenSSL and read all the contained fields. But using OpenSSL is only a one way how to read the receipt data. I also know another tool - CargoBay that operates with PKCS7 by means of native iOS methods without any 3-d party libs. I'd recommend also to check this question : iOS Restore in App purchases with receipts