Appearance
APP相关
安卓打包:
- 使用jdk8
- 查询java版本:java -version
- 这里yourAlias填写别名(英文)
- 1.创建证书——keytool -genkey -alias yourAlias -keyalg RSA -keysize 2048 -validity 36500 -keystore android.keystore
- 2.查询证书——keytool -list -v -keystore android.keystore(证书)
- 生成公钥文件:keytool -export -alias 别名 -keystore 你的keystore文件.keystore -file 导出的证书.cer
- 查询公钥信息:keytool -printcert -rfc -file 导出的证书.cer
微信支付——微信开放平台需填写证书的md5值,通过查询,把:去掉,字母小写。
苹果打包:
- 1.创建Identifiers(包名)
- 2.证书Certificates可以用之前的
- 3.创建Profiles,开发/应用商店的配置文件,绑定证书
苹果内购:
步骤:
获取支付通道——>支付——>发送服务器校验回执码——>成功/失败
- 1.同意付费协议、绑定银行卡、填写税务信息
- 2.创建内购商品,上传的构建版本绑定内购产品
- 3.创建沙盒测试账号,测试内购(不用审核也可以测试)
- 4.plus.payment.getChannels获取内购渠道
- 5.iapChannel.requestProduct获取商品信息
- 6.plus.payment.request发起内购支付
- 7.支付成功后,获取到res.transactionReceipt,上传到服务器,服务器验证
- "https://sandbox.itunes.apple.com/verifyReceipt" // 沙盒环境
- "https://buy.itunes.apple.com/verifyReceipt" // 正式环境
请求参数:
'receipt-data': receiptData,
'password': '共享密钥',
'exclude-old-transactions': true // 是否排除旧交易
- 返回参数:
- "status": 0, // 0表示成功,其他表示失败
代码示例:
前端:
js
const add = () => {
let iapChannel = null
const productIds = []; // 商品 ID 列表
// 获取支付通道
plus.payment.getChannels((channels) => {
for (let channel of channels) {
if (channel.id === 'appleiap') {
iapChannel = channel;
break;
}
}
if (iapChannel) {
// 请求商品详情
iapChannel.requestProduct(productIds, (products) => {
// console.log(products)
plus.payment.request(iapChannel, {
productid: "", // 商品 ID
username: "", // 用户标识
}, function(result) {
successRes(result)
}, function(e) {
// console.log("取消支付")
});
}, (error) => {
// console.log("获取商品失败")
});
} else {
// console.log("未找到 IAP 支付通道")
}
}, (error) => {
// console.log("获取支付通道失败")
});
}
const successRes = (res) => {
// console.log("支付成功")
try {
uni.request({
url: '',
method: 'POST',
data: {
'receipt': res.transactionReceipt,
'user': user_phone.value
},
success: (ress) => {
if (ress.data.success) {
// console.log('购买成功')
} else {
// console.log('购买失败')
}
},
fail(e) {
// console.log('购买失败')
}
});
} catch (errr) {
// console.log('购买失败')
}
}后端:
js
async function verifyReceipt(receiptData) {
try {
const url = "https://sandbox.itunes.apple.com/verifyReceipt" // 沙盒环境
// const url = "https://buy.itunes.apple.com/verifyReceipt" // 正式环境
const data = {
'receipt-data': receiptData,
'password': '',
'exclude-old-transactions': false
};
const response = await axios.post(url, data);
return response.data;
} catch (e) {
return false;
}
}
app.post('/iap', async (req, res) => {
const { receipt, user } = req.body;
const result = await verifyReceipt(receipt);
if (result.status === 0) {
res.json({
success: true,
error: `验证成功`
});
} else {
res.status(400).json({
success: false,
error: `验证失败,状态码: ${result.status}`
});
}
});