在 UniApp 中实现微信支付功能,离线打包需通过原生插件集成微信 SDK,并配置相关参数。以下是关键步骤:
1. 准备工作
- 注册微信开放平台账号,创建应用并获取 AppID。
- 申请微信支付权限,获取商户号(mch_id)和 API 密钥。
2. 集成微信 SDK(Android 示例)
3. 配置 AndroidManifest.xml
添加权限和微信 Activity:
<uses-permission android:name="android.permission.INTERNET" />
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true" />
4. 创建 WXPayEntryActivity
在包名目录下创建 wxapi/WXPayEntryActivity.java,处理支付结果回调:
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI api;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, "你的AppID");
        api.handleIntent(getIntent(), this);
    }
    @Override
    public void onReq(BaseReq req) {}
    @Override
    public void onResp(BaseResp resp) {
        // 处理支付结果,通过 UniApp 事件机制返回给前端
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            // 将 resp.errCode 发送给 UniApp 页面
        }
    }
}
5. UniApp 前端调用
在 UniApp 页面中,通过 uni.request 向服务端请求支付参数,然后调用原生方法:
// 请求服务端生成支付参数
uni.request({
    url: 'https://your-server.com/pay',
    success: (res) => {
        // 调用原生插件触发微信支付
        uni.invokeNative('WXPay', res.data, (result) => {
            if (result.code === 0) {
                uni.showToast({ title: '支付成功' });
            } else {
                uni.showToast({ title: '支付失败:' + result.errMsg });
            }
        });
    }
});
6. 服务端生成签名
服务端需生成预付单并签名(示例为 Node.js):
const crypto = require('crypto');
function generatePayParams(orderId, totalFee) {
    const params = {
        appid: '你的AppID',
        mch_id: '商户号',
        nonce_str: Math.random().toString(36).substr(2),
        body: '商品描述',
        out_trade_no: orderId,
        total_fee: totalFee,
        spbill_create_ip: '用户IP',
        notify_url: 'https://your-server.com/notify',
        trade_type: 'APP'
    };
    // 生成签名(按参数名排序后拼接并MD5加密)
    const sign = generateSign(params, '你的API密钥');
    params.sign = sign;
    return params;
}
注意事项
- iOS 配置:需在 Xcode 添加 URL Types(weixin),并在 AppDelegate中处理微信回调。
- 签名验证:确保服务端和客户端使用相同的签名算法。
- 测试:使用微信沙箱环境进行测试,避免正式环境出错。
通过以上步骤,即可在 UniApp 离线打包中实现微信支付功能。重点在于原生模块与 UniApp 的通信,以及服务端的参数生成和签名验证。