美文网首页
android关于QQ、微信、支付宝接入

android关于QQ、微信、支付宝接入

作者: 名字不想带英文 | 来源:发表于2019-09-30 12:30 被阅读0次

    官文文档基本是写得很好,照着官方文档接入后还有问题再来对照下这文章就是

    支付宝支付现在导入简单,直接在按官方文档说的在build.gradle加入导入就行(你避免不了要下载aar,所以还是自己去官网看下),就运用时代码要注意点
    支付宝文档地址https://docs.open.alipay.com/204/105051/
    下面是调起支付的代码

    final String orderInfox = "";//订单消息,就生成这东西烦人,但为了安全起见是服务器按照支付宝那边规则生成传过来的,我们直接拿来用就行,所以支付宝的接入在android端并没有什么坑
    Runnable pyRunnable = new Runnable() {
        @Override
        public void run() {
        PayTask alipay = new PayTask((Activity) context);
        Map<String, String> result = alipay.payV2(orderInfox, false);//调起支付宝支付,拿到回调的消息
        Message msg = new Message();
        msg.what = 1;
        msg.obj = result;
        handler.sendMessage(msg);
          }
        };
    Thread pyThread = new Thread(pyRunnable);
    pyThread.start();
    

    PayResult和ZhifubaoGsonBen都是用支付宝返回消息生成的对象类,名字什么的随意吧

    public class PayResult {
        private String resultStatus;
        private String result;
        private String memo;
    
        public PayResult(Map<String, String> rawResult) {
            if (rawResult == null) {
                return;
            }
    
            for (String key : rawResult.keySet()) {
                if (TextUtils.equals(key, "resultStatus")) {
                    resultStatus = rawResult.get(key);
                } else if (TextUtils.equals(key, "result")) {
                    result = rawResult.get(key);
                } else if (TextUtils.equals(key, "memo")) {
                    memo = rawResult.get(key);
                }
            }
        }
    
        @Override
        public String toString() {
            return "resultStatus={" + resultStatus + "};memo={" + memo
                    + "};result={" + result + "}";
        }
    
        /**
         * @return the resultStatus
         */
        public String getResultStatus() {
            return resultStatus;
        }
    
        /**
         * @return the memo
         */
        public String getMemo() {
            return memo;
        }
    
        /**
         * @return the result
         */
        public String getResult() {
            return result;
        }
    }
    
    public class ZhifubaoGsonBen {
    
        private AlipayTradeAppPayResponseBean alipay_trade_app_pay_response;
    
        private String sign;
        private String sign_type;
    
        public AlipayTradeAppPayResponseBean getAlipay_trade_app_pay_response() {
            return alipay_trade_app_pay_response;
        }
    
        public void setAlipay_trade_app_pay_response(AlipayTradeAppPayResponseBean alipay_trade_app_pay_response) {
            this.alipay_trade_app_pay_response = alipay_trade_app_pay_response;
        }
    
        public String getSign() {
            return sign;
        }
    
        public void setSign(String sign) {
            this.sign = sign;
        }
    
        public String getSign_type() {
            return sign_type;
        }
    
        public void setSign_type(String sign_type) {
            this.sign_type = sign_type;
        }
    
        public static class AlipayTradeAppPayResponseBean {
            private String code;
            private String msg;
            private String app_id;
            private String auth_app_id;
            private String charset;
            private String timestamp;
            private String total_amount;
            private String trade_no;
            private String seller_id;
            private String out_trade_no;
    
            public String getCode() {
                return code;
            }
    
            public void setCode(String code) {
                this.code = code;
            }
    
            public String getMsg() {
                return msg;
            }
    
            public void setMsg(String msg) {
                this.msg = msg;
            }
    
            public String getApp_id() {
                return app_id;
            }
    
            public void setApp_id(String app_id) {
                this.app_id = app_id;
            }
    
            public String getAuth_app_id() {
                return auth_app_id;
            }
    
            public void setAuth_app_id(String auth_app_id) {
                this.auth_app_id = auth_app_id;
            }
    
            public String getCharset() {
                return charset;
            }
    
            public void setCharset(String charset) {
                this.charset = charset;
            }
    
            public String getTimestamp() {
                return timestamp;
            }
    
            public void setTimestamp(String timestamp) {
                this.timestamp = timestamp;
            }
    
            public String getTotal_amount() {
                return total_amount;
            }
    
            public void setTotal_amount(String total_amount) {
                this.total_amount = total_amount;
            }
    
            public String getTrade_no() {
                return trade_no;
            }
    
            public void setTrade_no(String trade_no) {
                this.trade_no = trade_no;
            }
    
            public String getSeller_id() {
                return seller_id;
            }
    
            public void setSeller_id(String seller_id) {
                this.seller_id = seller_id;
            }
    
            public String getOut_trade_no() {
                return out_trade_no;
            }
    
            public void setOut_trade_no(String out_trade_no) {
                this.out_trade_no = out_trade_no;
            }
        }
    }
    

    处理支付宝的支付回调

    @SuppressLint("HandlerLeak")
        private static Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                final PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                Gson gson = new Gson();
                ZhifubaoGsonBen zhifubaoGsonBen = gson.fromJson(resultInfo, ZhifubaoGsonBen.class);
                if (payResult.getResultStatus().equals("9000")) {//支付成功,但是为了保险起见,建议再把数据提交给服务器验证一遍
                    //将数据提交自己的服务器去验证
                } else {
                    //支付失败
                }
            }
        };
    

    微信同样先导入(要注意的是微信只能在正式环境即你打包后的情况下才能正常运行)
    文档位置:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html
    https://pay.weixin.qq.com/wiki/doc/api/index.html
    dependencies {
    api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
    }

    //微信官方申请的合法的App—id
    public static final String APP_ID = "***********";
    主要是要在项目包(项目申请微信功能时填的那个包)下创建wxapi包,然后在wxapi里创建文件WXPayEntryActivity(微信支付回调)、WXEntryActivity(微信登录|分享|小程序的回调)。

    /**
         * 单纯分享图片到微信
         *
         * @param type    1(好友)2(朋友圈)
         * @param context
         * @param imgPath 图片路径
         */
        public static void shareWechatImg(int type, Activity context, String imgPath) {
            IWXAPI iwxapi = WXAPIFactory.createWXAPI(context, BaseApplication.APP_ID);
            iwxapi.registerApp(BaseApplication.APP_ID);
            WXImageObject imgObj = new WXImageObject();
    //        设置文件的路径
            imgObj.setImagePath(imgPath);
    //        第三步:创建WXMediaMessage对象,并包装WXimageObjext对象
            WXMediaMessage msg = new WXMediaMessage();
            msg.mediaObject = imgObj;
    //        第四步:压缩图片
            Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
            Bitmap thumBitmap = Bitmap.createScaledBitmap(bitmap, 80, 80, true);
    //        释放图片占用的内存资源
            bitmap.recycle();
            msg.thumbData = bmpToByteArray(thumBitmap, true);//压缩图
    //        第五步:创建SendMessageTo.Req对象,发送数据
            SendMessageToWX.Req req = new SendMessageToWX.Req();
    //        唯一标识
            req.transaction = String.valueOf(System.currentTimeMillis());
    //        发送的内容或者对象
            req.message = msg;
            if (type == 2) {
                req.scene = WXSceneTimeline;
            } else {
                req.scene = WXSceneSession;
            }
            iwxapi.sendReq(req);
        }
    
    public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
        private IWXAPI api;
        private Intent intent_zhifu;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    //        setContentView(R.layout.acrivity_wx);
            api = WXAPIFactory.createWXAPI(this, BaseApplication.APP_ID);
            api.handleIntent(getIntent(), this);
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);
            api.handleIntent(intent, this);
        }
    
        @Override
        public void onReq(BaseReq req) {
        }
    
        /**
         * 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
         * arg0。errCode  0成功 -1支付失败 -2取消
         */
        @Override
        public void onResp(BaseResp resp) {
            LogUtil.i("支付返回码"+resp.errCode);
            if (resp.errCode == 0) {//支付成功
                //PayHelper.Success();
                finish();
            } else if (resp.errCode == -1) {//支付失败
                PayHelper.Faile();
                Toast.makeText(getApplicationContext(), "支付失败", Toast.LENGTH_SHORT).show();
                finish();
            } else {//取消
                Toast.makeText(getApplicationContext(), "支付取消", Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }
    
    public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
        private IWXAPI api;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            api = WXAPIFactory.createWXAPI(this, BaseApplication.APP_ID);
            api.handleIntent(getIntent(), this);
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);
            api.handleIntent(intent, this);
        }
    
    
        @Override
        public void onReq(BaseReq req) {
        }
    
        /**
         * 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
         * arg0。errCode  0成功 -1支付失败 -2取消
         */
        @Override
        public void onResp(final BaseResp resp) {
            LogUtil.i("baseResp:" + resp.errStr + "," + resp.openId + "," + resp.transaction + "," + resp.errCode);
            Bundle bundle = getIntent().getExtras();
            SendAuth.Resp sendresp = new SendAuth.Resp(bundle);
            if (resp.errCode == 0) {//分享成功
                if (resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
                    //登陆结果回调
                    getUserMsg(sendresp.code);
                    finish();
                } else if (resp.getType() == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
                   // ShareHelper.Share(1);
                    Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show();
                    finish();
                }
            } else if (resp.errCode == -1) {//分享失败
                Toast.makeText(getApplicationContext(), "分享失败", Toast.LENGTH_SHORT).show();
                finish();
            } else {//取消
                Toast.makeText(getApplicationContext(), "分享取消", Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    
    private void getUserMsg(String code) {
    //微信登录成功获取登录用户token,链接是:"https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +BaseApplication.APP_ID + "&secret=22344c3b934cd05461f5521e06522015&code=" + code +"&grant_type=authorization_code"
    //再用那token去请求登录用户的个人信息,获取个人用户信息的链接为:"https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + openid
        }
    }
    

    同时要在AndroidManifest.xml中添加

    <activity
                android:name=".wxapi.WXPayEntryActivity"
                android:exported="true"
                android:launchMode="singleTop">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:scheme="xxxxxxxxxxx" /> <!-- 需修改 -->
                </intent-filter>
            </activity>
            <activity
                android:name=".wxapi.WXEntryActivity"
                android:exported="true"
                android:launchMode="singleTop"
                android:screenOrientation="portrait" />
    

    微信的调起,WxPayGsonBean 的对象类在下面

    private static void WxPay(Context context) {
            final String str = "服务器传过来的订单数据";
            WxPayGsonBean wxPayGsonBean = BaseApplication.getGson().fromJson(str, WxPayGsonBean.class);
            IWXAPI iwxapi = WXAPIFactory.createWXAPI(context, BaseApplication.APP_ID);
            iwxapi.registerApp(BaseApplication.APP_ID);
            PayReq request = new PayReq();
            request.appId = wxPayGsonBean.getAppid();
            request.partnerId = wxPayGsonBean.getPartnerid();
            request.prepayId = wxPayGsonBean.getPrepayid();
            request.packageValue = "Sign=WXPay";
            request.nonceStr = wxPayGsonBean.getNoncestr();
            request.timeStamp = wxPayGsonBean.getTimestamp() + "";
            request.sign = wxPayGsonBean.getSign();
            iwxapi.sendReq(request);
        }
    
    public class WxPayGsonBean {
    
        private String appid;
        private String noncestr;
        @SerializedName("package")
        private String packageX;
        private String partnerid;
        private String prepayid;
        private String sign;
        private int timestamp;
    
        public String getAppid() {
            return appid;
        }
    
        public void setAppid(String appid) {
            this.appid = appid;
        }
    
        public String getNoncestr() {
            return noncestr;
        }
    
        public void setNoncestr(String noncestr) {
            this.noncestr = noncestr;
        }
    
        public String getPackageX() {
            return packageX;
        }
    
        public void setPackageX(String packageX) {
            this.packageX = packageX;
        }
    
        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 getSign() {
            return sign;
        }
    
        public void setSign(String sign) {
            this.sign = sign;
        }
    
        public int getTimestamp() {
            return timestamp;
        }
    
        public void setTimestamp(int timestamp) {
            this.timestamp = timestamp;
        }
    }
    
    

    微信分享照着文档来就是
    QQ分享照着文档走就是,记住qq想要有回调必须在调用的qq分享的的Activity中添加

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Tencent.onActivityResultData(requestCode, resultCode, data, shareListen);
            if (requestCode == Constants.REQUEST_API) {
                if (resultCode == Constants.REQUEST_QQ_SHARE ||
                        resultCode == Constants.REQUEST_QZONE_SHARE ||
                        resultCode == Constants.REQUEST_OLD_SHARE) {
                    Tencent.handleResultData(data, shareListen);
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:android关于QQ、微信、支付宝接入

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