Skip to content

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,上传到服务器,服务器验证

请求参数:

'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}`
        });
    }
});