支付宝以及微信支付

xiaoxiao2021-02-28  32

本人第一次写啥子博客,虽然不是自愿的,但是我自己的代码确实写的让人无法直视,那我就写写渣渣的代码吧。写的不好请大家见谅。欢迎指出错误。


支付宝支付 1、在支付宝开放着平台上申请一个开发者的账号,在我的应用中创建一个应用,填写相应的信息,提交审核。审核通过后,拿到APPID。 2、将alipay-sdk-common/alipaySdk-xxxxxxxx.jar这个jar包下载下来,放在项目下的lib包中。右击add as library. 3、在AndroidManifest中添加声明

<activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" > </activity> <activity android:name="com.alipay.sdk.auth.AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" > </activity> ///权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

通过接口获取我们需要的值

private void getPayInfo() { if (dialog == null) { dialog = MsgUtils.createLoadingDialog(RechargeDepositActivity.this, "正在处理..."); dialog.show(); } Map<String, String> map = new HashMap<>(); map.put("order_pay_plat", pay_type);//类型,1=支付宝 2=微信 map.put("order_pay_type", "1");//流水类型,1=押金充值,2=车费充值,3=退押金 map.put("order_amount", BaseInfo.getDeposited(sp));//金额 TODO map.put("token", UserInfo.getToken(sp)); String url = "url" XutilsHttp.getInstance().post(url, map, new XCallBack() { @Override public void onResponse(String result) { DebugLog.d(result); try { JSONObject jsonObject = new JSONObject(result); if ("10000".equals(jsonObject.getString("errcode"))) { switch (pay_type) { case PAY_TYPE_WX: wxPay(jsonObject.getString("data")); break; case PAY_TYPE_AL: String data = jsonObject.getString("data"); aliPay(data); break; } getUserInfo(); } } catch (JSONException e) { e.printStackTrace(); } if (dialog != null && dialog.isShowing()) dialog.dismiss(); } @Override public void onFail(String errorMsg, String whereRequest) { DebugLog.d(errorMsg); if (dialog != null && dialog.isShowing()) dialog.dismiss(); } }); }

若成功,跳入alipay方法,获取个人信息

private void aliPay(String data) { try { JSONObject dataJson = new JSONObject(data.substring(1, data.length() - 1)); AliPay.Builder builder = new AliPay.Builder(RechargeDepositActivity.this); builder.setSIGN_NATURE(dataJson.getString("signature")) .setPayCallBackListener(new AliPay.Builder.PayCallBackListener() { @Override public void onPayCallBack(int status, String resultStatus, String progress) { switch (status) { case 9000: case 8000: openLockThread(); UserInfo.setIs_deposited(sp, "1"); Intent in = new Intent(RechargeDepositActivity.this, MyWalletActivity.class); setResult(1002, in); finish(); break; default: T.showShort(RechargeDepositActivity.this, "充值失败"); break; } } }); builder.pay(); } catch (JSONException e) { e.printStackTrace(); } }

通过支付宝返回的值来判断到底有没有支付成功。 要写一个异步的类

public class AliPay { public static class Builder { private Activity mActivity; public Builder(Activity activity) { this.mActivity = activity; } /** * 设置商户PID */ private String SIGN_NATURE = ""; private final int SDK_PAY_FLAG = 6406; /** * 设置商户PID */ public AliPay.Builder setSIGN_NATURE(String SIGN_NATURE) { this.SIGN_NATURE = SIGN_NATURE; return this; } @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { DebugLog.d(msg.obj); PayResult payResult = new PayResult((String) msg.obj); /** * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/ * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665& * docType=1) 建议商户依赖异步通知 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息 String resultStatus = payResult.getResultStatus(); // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档 if (TextUtils.equals(resultStatus, "9000")) { if (mPayCallBackListener != null) { mPayCallBackListener.onPayCallBack(9000, "9000", "支付成功"); } } else { // 判断resultStatus 为非"9000"则代表可能支付失败 // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态) if (TextUtils.equals(resultStatus, "8000")) { if (mPayCallBackListener != null) { mPayCallBackListener.onPayCallBack(8000, "8000", "支付结果确认中"); } } else { // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误 if (mPayCallBackListener != null) { mPayCallBackListener.onPayCallBack(0, "0", "支付失败"); } } } break; } default: break; } } }; public void pay() { Runnable payRunnable = new Runnable() { @Override public void run() { // 构造PayTask 对象 PayTask alipay = new PayTask(mActivity); // 调用支付接口,获取支付结果 String result = alipay.pay(SIGN_NATURE, true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; // 必须异步调用 Thread payThread = new Thread(payRunnable); payThread.start(); } public void setPayCallBackListener(PayCallBackListener listener) { this.mPayCallBackListener = listener; } private PayCallBackListener mPayCallBackListener; public interface PayCallBackListener { void onPayCallBack(int status, String resultStatus, String progress); } } // 商户PID private String SIGN_NATURE = ""; private Builder payData; public Builder build(Activity activity) { payData = new Builder(activity); payData.setSIGN_NATURE(SIGN_NATURE); return payData; } public AliPay setSIGN_NATURE(String SIGN_NATURE) { this.SIGN_NATURE = SIGN_NATURE; return this; } public void pay() { if (payData != null) { payData.pay(); } } }

完成

微信支付 1、在微信开放者平台上注册开发者账户,并创建一个项目应用。提交审核。并获取到自己的appid。 2、在build 中添加

dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' }

3、在AndroidManifest中加入权限

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

4、注册微信

private IWXAPIWXApi WXApi; WXApi= WXAPIFactory.createWXAPI(this, MyApplication.instance().appConfig.wxapi_key); WXApi.registerApp(MyApplication.instance().appConfig.wxapi_key);

判断是否安装微信

private boolean isWXAppInstalledAndSupported() { IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null); msgApi.registerApp(Constants.APP_ID); return msgApi.isWXAppInstalled() && msgApi.isWXAppSupportAPI(); }

写一个实体类

public class WxPayInfo implements Serializable { /** * appid : wx53fe34e13fb598b0 * noncestr : p6fqgfrzxoayfyuizz7jrtpl7kf04p2h * package : Sign=WXPay * partnerid : 1456164002 * prepayid : wx201704051152028a7ad13e3f0660398498 * timestamp : 1491364375 * sign : 1FD4AA0F10E9532DE466BD645188695A */ private String appid; private String noncestr; @SerializedName("package") private String packageX; private String partnerid; private String prepayid; private int timestamp; private String sign; 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 int getTimestamp() { return timestamp; } public void setTimestamp(int timestamp) { this.timestamp = timestamp; } public String getSign() { return sign; } public void setSign(String sign) { this.sign = sign; } }

将返回的数据放入 private void wxPay(String info) { info = info.substring(1, info.length() - 1); Gson gson = new Gson(); WxPayInfo wxPayinfo = gson.fromJson(info, WxPayInfo.class); BaseInfo.setWxAppId(sp, wxPayinfo.getAppid()); IWXAPI msgApi = WXAPIFactory.createWXAPI(RechargeDepositActivity.this, null); PayReq payReq = new PayReq(); payReq.appId = wxPayinfo.getAppid(); payReq.partnerId = wxPayinfo.getPartnerid(); payReq.prepayId = wxPayinfo.getPrepayid(); payReq.packageValue = wxPayinfo.getPackageX(); payReq.nonceStr = wxPayinfo.getNoncestr(); payReq.timeStamp = wxPayinfo.getTimestamp() + “”; payReq.sign = wxPayinfo.getSign(); msgApi.registerApp(payReq.appId); msgApi.sendReq(payReq); } 调起微信支付。

转载请注明原文地址: https://www.6miu.com/read-74991.html

最新回复(0)