美文网首页
微信APP支付

微信APP支付

作者: 云三木 | 来源:发表于2020-01-13 18:18 被阅读0次

微信app支付需要关联微信商户平台创建app应用,和公众号及H5支付不同,支付时使用的appid也是开放平台的appid,

1.微信开放平台申请支付

没有账号具体参考官方文档:https://kf.qq.com/faq/1612267j2eQ3161226jIVbA3.html

2.统一下单,返回支付参数

    public function unifiedOrder($params) {
        $data = array();
        $data["appid"] = $this->_config["appid"];   // 公众账号ID
        $data["mch_id"] = $this->_config["mch_id"]; // 商户号
        $data["device_info"] = (isset($params['device_info'])&&trim($params['device_info'])!='')?$params['device_info']:null; // device_info 设备号
        $data["nonce_str"] = $this->get_nonce_string(); // 随机字符串
        $data["body"] = $params['body']; // 商品描述
        $data["detail"] = isset($params['detail'])?$params['detail']:null;//optional 商品详情
        $data["attach"] = isset($params['attach'])?$params['attach']:null;//optional 附加数据
        $data["out_trade_no"] = isset($params['out_trade_no'])?$params['out_trade_no']:null; // 商户订单号
        $data["fee_type"] = isset($params['fee_type'])?$params['fee_type']:'CNY'; // 标价币种
        $data["total_fee"]    = $params['total_fee']; // 标价金额
        $data["spbill_create_ip"] = $params['spbill_create_ip']; // 终端IP
        $data["time_start"] = isset($params['time_start'])?$params['time_start']:null;//optional 交易起始时间
        $data["time_expire"] = isset($params['time_expire'])?$params['time_expire']:null;//optional 交易结束时间
        $data["goods_tag"] = isset($params['goods_tag'])?$params['goods_tag']:null; // 订单优惠标记
        $data["notify_url"] = $params['notify_url']; // 通知地址
        $data["trade_type"] = $params['trade_type']; // 交易类型
        //$data["product_id"] = isset($params['product_id'])?$params['product_id']:null;//required when trade_type = NATIVE 商品ID
        //$data["openid"] = isset($params['openid'])?$params['openid']:null; // 用户标识
        //$data["scene_info"] = isset($params['scene_info'])?$params['scene_info']:null;// scene_info 场景信息 (h5支付必填)
        $data["limit_pay"] = isset($params['limit_pay'])?$params['limit_pay']:null;//指定支付方式 no_credit--指定不能使用信用卡支付
        $data["receipt"] = isset($params['receipt'])?$params['receipt']:null;//开发票入口开放标识
        $result = $this->post(self::URL_UNIFIEDORDER, $data);
        return $result;
    }
    注意:app的统一下单有几个参数与公众号和H5不同,针对不同的支付类型需要看清楚参数,如果不需要的参数可直接为NULL,拼接时给过滤掉

3.调起支付

目前我使用的是Hbuilder打包的app,调起支付用的是plus.payment.getChannels

        // 微信app支付
        plus.payment.getChannels((channels) => {
            try {
                let c = channels.find(e => e.id === 'wxpay') || {serviceReady: false}
                console.log(c.serviceReady)
                if(!c.serviceReady){
                    alert('未安装微信')
                    return
                }
                plus.payment.request(c, res.data.pay_params, () => {
                    console.log("支付成功")
                    // 跳转到支付成功页面
                    that.payResult(campusId, verificationCode);
                }, function(e){
                    console.log("支付失败")
                    // that.payResult(campusId, verificationCode);
                    alert("支付失败:"+e.message)
                } ) 
            } catch (error) {
                console.log('异常')
                console.log(error)
            }
        }, function(e){
            console.log("获取支付通道列表失败:"+e.message)
        })
    res.data.pay_params就是接口返回的APP支付调用参数,示例:
    {
        "appid": 开放平台appId,
        "noncestr": "b10mnlov3iqpr62gsdjf45zuktcha89e", //随机字符串
        "package": "Sign=WXPay",
        "partnerid": 商户号 , 
        "prepayid": 预支付交易会话id, 
        "timestamp":1578908835, //时间戳 
        "sign": that.payData.sign, //微信签名 
    }

4.发布APP

正式环境与测试环境,发布APP是需要申请安卓和IOS的包名与秘钥证书

5.其他

我在开发是遇到的一些问题:
1.appid与mch_id不匹配
appid是微信开放平台申请的APP的appid,和公众号appid不要搞混了

2.IOS调起支付时报错error:-1
打包后没有替换证书和秘钥,使用的是测试环境的证书

3.安卓调起支付时报错error:-100
安卓申请支付需要客户配置秘钥,当时秘钥配置不对,支付时报错

相关文章

网友评论

      本文标题:微信APP支付

      本文链接:https://www.haomeiwen.com/subject/jxrnactx.html