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

本文档详细介绍了如何在Android应用中集成支付宝和微信支付。首先,通过在build.gradle文件中导入官方库实现支付宝支付。支付过程涉及服务器生成的安全订单信息,使用PayTask进行支付调用。对于微信支付,需要在AndroidManifest.xml中配置回调Activity,并处理支付、分享和登录的回调。此外,还提供了处理支付结果和分享状态的方法。
摘要由CSDN通过智能技术生成

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

支付宝支付现在导入简单,直接在按官方文档说的在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 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 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) msg.obj);

String resultInfo = payResult.getResult();// 同步返回需要验证的信息

Gson gson = new Gson();

ZhifubaoGsonBen zhifubaoGsonBen = gson.fromJson(resultInfo, ZhifubaoGsonBen.class);

if (payResult.getResultStatus().equals("9000")) {//支付成功,但是为了保险起见,建议再把数据提交给服务器验证一遍

//将数据提交自己的服务器去验证

} else {

//支付失败

}

}

};

//微信官方申请的合法的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中添加

android:name=".wxapi.WXPayEntryActivity"

android:exported="true"

android:launchMode="singleTop">

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);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值