美文网首页
Android 接入微信支付和支付宝支付

Android 接入微信支付和支付宝支付

作者: StoneWay3 | 来源:发表于2023-09-21 15:01 被阅读0次

    最近项目接入了微信支付和支付宝支付,目前国内普遍也就这两种了。现在两个的接入已经很简单了,几年前的支付还需要自己写参数,现在参数都在后台了,尤其是支付宝,只需要一个订单信息就行了。
    总体来说,接入的步骤也就是三四步:

    1接入sdk,2获取订单信息,3调起支付,4接受支付回调信息,5处理回调结果

    好了,下面说说具体步骤:

    先说支付宝:

    第一步:接入sdk

    dependencies {
      api 'com.alipay.sdk:alipaysdk-android:+@aar'
    }
    

    第二步,获取到订单信息,这个需要你自己调用自己的后台

    String aliPayOrderStr="......"
    

    第三步:调起支付宝支付

       final Runnable payRunnable = () -> {
                PayTask alipay = new PayTask(mActivity);
                Map<String, String> result = alipay.payV2(aliPayOrderStr, true);
                Log.i("result==", result.toString());
                Message msg = new Message();
                msg.what = PayCodes.SDK_PAY_FLAG_ZHIFUBAO;
                msg.obj = result;
                mHandler.sendMessage(msg);
            };// 必须异步调用
            Thread payThread = new Thread(payRunnable);
            payThread.start();
    

    第四步:这一步跟第三步写在同一个文件就行

      @SuppressLint("HandlerLeak")
        private Handler mHandler = new Handler() {
            @SuppressWarnings("unused")
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case PayCodes.SDK_PAY_FLAG_ZHIFUBAO: {
                        //这里接收支付宝的回调信息。强烈建议  支付结果一定要调用自己的服务端来确定,不能通过支付宝的回调结果来判断
                        LogUtils.getInstance().e("");
                        break;
                    }
                    default:
                        break;
                }
            }
        };
    

    第五步:根据自己的业务需求处理结果。

    微信支付过程:

    第一步:集成sdk

    dependencies {
       //微信
        api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
    }
    

    第二步:获取订单信息,同样需要你后台处理,后台给的数据格式是这样的

    public class WxOrderBean {
    
        /**
         * package : Sign=WXPay
         * appid :appidstr
         * sign : signstr
         * partnerid : partnerid 
         * prepayid : prepayid 
         * noncestr : noncestr 
         * timestamp : 1695351878
         */
    
        @SerializedName("package")
        private String packageX;
        private String appid;
        private String sign;
        private String partnerid;
        private String prepayid;
        private String noncestr;
        private String timestamp;
    
        public String getPackageX() {
            return packageX;
        }
    
        public void setPackageX(String packageX) {
            this.packageX = packageX;
        }
    
        public String getAppid() {
            return appid;
        }
    
        public void setAppid(String appid) {
            this.appid = appid;
        }
    
        public String getSign() {
            return sign;
        }
    
        public void setSign(String sign) {
            this.sign = sign;
        }
    
        public String getPartnerid() {
            return partnerid;
        }
    
        public void setPartnerid(String partnerid) {
            this.partnerid = partnerid;
        }
    
        public String getPrepayid() {
            return prepayid;
        }
    
        public void setPrepayid(String prepayid) {
            this.prepayid = prepayid;
        }
    
        public String getNoncestr() {
            return noncestr;
        }
    
        public void setNoncestr(String noncestr) {
            this.noncestr = noncestr;
        }
    
        public String getTimestamp() {
            return timestamp;
        }
    
        public void setTimestamp(String timestamp) {
            this.timestamp = timestamp;
        }
    }
    

    第三步,调起微信支付:

    //先将你拿到的数据处理成这个WxOrderBean 对象
    WxOrderBean datas;
    // 需要一个注册微信支付的APPID
            IWXAPI api = WXAPIFactory.createWXAPI(mContext,你自己的微信appid);
            PayReq req = new PayReq();
            req.appId = datas.getAppid();
            req.partnerId = datas.getPartnerid();
            req.prepayId = datas.getPrepayid();
            req.nonceStr = datas.getNoncestr();
            req.timeStamp = datas.getTimestamp();
            req.packageValue = datas.getPackageX();
            req.sign = datas.getSign();
            api.sendReq(req); //这里就发起调用微信支付了
    

    第四步:接受微信支付的回调信息。

    (1)首先在项目的包路径下面新建一个文件夹wxapi(必须是wxapi这个名字)

    (2)然后在wxapi里面新建一个叫WXPayEntryActivity的class文件

    (3)在AndroidManifest 文件中注册WXPayEntryActivity,

    <activity  android:name=".wxapi.WXPayEntryActivity"  android:exported="true"  android:launchMode="singleTop"/>
    

    特别需要注意的是上面的 exported 属性和 launchMode 属性一定要加上,否则是接收不到回调的

    (4)WXPayEntryActivity要实现IWXAPIEventHandler 的接口

    public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
        @Override
        public void onResp(BaseResp baseResp) {
            //zhifu
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("支付结果");
                builder.setMessage(String.valueOf(baseResp.errCode));
                builder.show();
            }
        }
    }
    

    第五步:根据自己的业务需求处理结果,注意WXPayEntryActivity一般不要有布局,而且拿到结果之后要finish掉,当然你也可以在这里做一些ui。

    好啦,微信和支付宝的支付集成到这里就已经弄好了,希望对大家有所帮助。

    相关文章

      网友评论

          本文标题:Android 接入微信支付和支付宝支付

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