微信支付与支付宝的封装
来源:互联网 发布:对人工智能的看法 编辑:程序博客网 时间:2024/05/19 10:41
- 0.先睹为快
在这里没有详细说明要怎么接入微信支付和支付宝,具体去看官方的文档,请见谅。
- 1.Android Manifest配置
<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" />
- 2.注册activity
<!-- 微信支付 --><activity android:name=".wxapi.WXPayEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity android:name="com.cooby.news.play.weixin.WXPayCallbackActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent.NoTitleBar" > </activity> <!-- 支付宝支付 --> <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>
- 3.支付宝支付的代码封装
public class Alipay { private String mParams; private PayTask mPayTask; private AlipayResultCallBack mCallback; public static final int ERROR_RESULT = 1; //支付结果解析错误 public static final int ERROR_PAY = 2; //支付失败 public static final int ERROR_NETWORK = 3; //网络连接错误 public interface AlipayResultCallBack { void onSuccess(); //支付成功 void onDealing(); //正在处理中 小概率事件 此时以验证服务端异步通知结果为准 void onError(int error_code); //支付失败 void onCancel(); //支付取消 } public Alipay(Context context, String params, AlipayResultCallBack callback) { mParams = params; mCallback = callback; mPayTask = new PayTask((Activity) context); } //支付 public void doPay() { final Handler handler = new Handler(); new Thread(new Runnable() { @Override public void run() { String result = mPayTask.pay(mParams, true); final AlipayResult pay_result = new AlipayResult(result); handler.post(new Runnable() { @Override public void run() { if(mCallback == null) { return; } if(pay_result == null) { mCallback.onError(ERROR_RESULT); return; } String resultStatus = pay_result.getResultStatus(); if(TextUtils.equals(resultStatus, "9000")) { //支付成功 mCallback.onSuccess(); } else if(TextUtils.equals(resultStatus, "8000")) { //支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态) mCallback.onDealing(); } else if(TextUtils.equals(resultStatus, "6001")) { //支付取消 mCallback.onCancel(); } else if(TextUtils.equals(resultStatus, "6002")) { //网络连接出错 mCallback.onError(ERROR_NETWORK); } else if(TextUtils.equals(resultStatus, "4000")) { //支付错误 mCallback.onError(ERROR_PAY); } } }); } }).start(); }}
public class AlipayResult { private String resultStatus; private String result; private String memo; public AlipayResult(String rawResult) { if (TextUtils.isEmpty(rawResult)) return; String[] resultParams = rawResult.split(";"); for (String resultParam : resultParams) { if (resultParam.startsWith("resultStatus")) { resultStatus = gatValue(resultParam, "resultStatus"); } if (resultParam.startsWith("result")) { result = gatValue(resultParam, "result"); } if (resultParam.startsWith("memo")) { memo = gatValue(resultParam, "memo"); } } if (TextUtils.isEmpty(resultStatus)) { return; } } @Override public String toString() { return "resultStatus={" + resultStatus + "};memo={" + memo + "};result={" + result + "}"; } private String gatValue(String content, String key) { String prefix = key + "={"; return content.substring(content.indexOf(prefix) + prefix.length(), content.lastIndexOf("}")); } /** * @return the resultStatus */ public String getResultStatus() { return resultStatus; } /** * @return the memo */ public String getMemo() { return memo; } /** * @return the result */ public String getResult() { return result; }}
- 4.微信支付的代码封装
/** * 微信支付 */public class WXPay { private static WXPay mWXPay; private IWXAPI mWXApi; private String mPayParam; private WXPayResultCallBack mCallback; public static final int NO_OR_LOW_WX = 1; //未安装微信或微信版本过低 public static final int ERROR_PAY_PARAM = 2; //支付参数错误 public static final int ERROR_PAY = 3; //支付失败 public interface WXPayResultCallBack { void onSuccess(); //支付成功 void onError(int error_code); //支付失败 void onCancel(); //支付取消 } public WXPay(Context context, String wx_appid) { mWXApi = WXAPIFactory.createWXAPI(context, null); mWXApi.registerApp(wx_appid); } public static void init(Context context, String wx_appid) { if(mWXPay == null) { mWXPay = new WXPay(context, wx_appid); } } public static WXPay getInstance(){ return mWXPay; } public IWXAPI getWXApi() { return mWXApi; } /** * 发起微信支付 */ public void doPay(String pay_param, WXPayResultCallBack callback) { mPayParam = pay_param; mCallback = callback; if(!check()) { if(mCallback != null) { mCallback.onError(NO_OR_LOW_WX); } return; } JSONObject param = null; try { param = new JSONObject(mPayParam); } catch (JSONException e) { e.printStackTrace(); if(mCallback != null) { mCallback.onError(ERROR_PAY_PARAM); } return; } if(param == null || TextUtils.isEmpty(param.optString("appid")) || TextUtils.isEmpty(param.optString("partnerid")) || TextUtils.isEmpty(param.optString("prepayid")) || TextUtils.isEmpty(param.optString("package")) || TextUtils.isEmpty(param.optString("noncestr")) || TextUtils.isEmpty(param.optString("timestamp")) || TextUtils.isEmpty(param.optString("sign"))) { if(mCallback != null) { mCallback.onError(ERROR_PAY_PARAM); } return; } PayReq req = new PayReq(); req.appId = param.optString("appid"); req.partnerId = param.optString("partnerid"); req.prepayId = param.optString("prepayid"); req.packageValue = param.optString("package"); req.nonceStr = param.optString("noncestr"); req.timeStamp = param.optString("timestamp"); req.sign = param.optString("sign"); mWXApi.sendReq(req); } //支付回调响应 public void onResp(int error_code) { if(mCallback == null) { return; } if(error_code == 0) { //成功 mCallback.onSuccess(); } else if(error_code == -1) { //错误 mCallback.onError(ERROR_PAY); } else if(error_code == -2) { //取消 mCallback.onCancel(); } mCallback = null; } //检测是否支持微信支付 private boolean check() { return mWXApi.isWXAppInstalled() && mWXApi.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT; }}
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pay_results); if(WXPay.getInstance() != null) { WXPay.getInstance().getWXApi().handleIntent(getIntent(), this); } else { finish(); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); if(WXPay.getInstance() != null) { WXPay.getInstance().getWXApi().handleIntent(intent, this); } } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) { if(resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if(WXPay.getInstance() != null) { if(resp.errStr != null) { Log.e("wxpay", "errstr=" + resp.errStr); } WXPay.getInstance().onResp(resp.errCode); finish(); } } }}
public class WXPayCallbackActivity extends Activity implements IWXAPIEventHandler { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxpay_call_back); if(WXPay.getInstance() != null) { WXPay.getInstance().getWXApi().handleIntent(getIntent(), this); } else { finish(); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); if(WXPay.getInstance() != null) { WXPay.getInstance().getWXApi().handleIntent(intent, this); } } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if(WXPay.getInstance() != null) { if(baseResp.errStr != null) { Log.e("wxpay", "errstr=" + baseResp.errStr); } WXPay.getInstance().onResp(baseResp.errCode); finish(); } } }}
- 5.发起支付
在业务代码中调用封装好的微信支付或支付宝支付
- 5.1 微信支付
/** * 微信支付 * @param pay_param 支付服务生成的支付参数 */ private void doWXPay(String pay_param) { String wx_appid = "wx6b69bdbf2adca4f8"; //替换为自己的appid WXPay.init(getApplicationContext(), wx_appid); //要在支付前调用 WXPay.getInstance().doPay(pay_param, new WXPay.WXPayResultCallBack() { @Override public void onSuccess() { Toast.makeText(getApplication(), "支付成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(int error_code) { switch (error_code) { case WXPay.NO_OR_LOW_WX: Toast.makeText(getApplication(), "未安装微信或微信版本过低", Toast.LENGTH_SHORT).show(); break; case WXPay.ERROR_PAY_PARAM: Toast.makeText(getApplication(), "参数错误", Toast.LENGTH_SHORT).show(); break; case WXPay.ERROR_PAY: Toast.makeText(getApplication(), "支付失败", Toast.LENGTH_SHORT).show(); break; } } @Override public void onCancel() { Toast.makeText(getApplication(), "支付取消", Toast.LENGTH_SHORT).show(); } }); }
- 5.2 支付宝支付
/** * 支付宝支付 * @param pay_param 支付服务生成的支付参数 */ private void doAlipay(String pay_param) { new Alipay(this, pay_param, new Alipay.AlipayResultCallBack() { @Override public void onSuccess() { Toast.makeText(getApplication(), "支付成功", Toast.LENGTH_SHORT).show(); } @Override public void onDealing() { Toast.makeText(getApplication(), "支付处理中...", Toast.LENGTH_SHORT).show(); } @Override public void onError(int error_code) { switch (error_code) { case Alipay.ERROR_RESULT: Toast.makeText(getApplication(), "支付失败:支付结果解析错误", Toast.LENGTH_SHORT).show(); break; case Alipay.ERROR_NETWORK: Toast.makeText(getApplication(), "支付失败:网络连接错误", Toast.LENGTH_SHORT).show(); break; case Alipay.ERROR_PAY: Toast.makeText(getApplication(), "支付错误:支付码支付失败", Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(getApplication(), "支付错误", Toast.LENGTH_SHORT).show(); break; } } @Override public void onCancel() { Toast.makeText(getApplication(), "支付取消", Toast.LENGTH_SHORT).show(); } }).doPay(); }
0 0
- 微信支付与支付宝的封装
- 微信支付和支付宝支付的封装
- 自己封装的微信支付与支付宝支付(服务端)
- 微信支付与支付宝支付
- 支付宝支付与微信支付
- 微信支付与支付宝支付
- 支付宝支付与微信支付的集成
- 支付宝和微信支付封装
- 支付封装(微信/支付宝)
- 支付宝、微信支付功能封装
- 封装的简单支付 微信支付宝
- 支付宝与微信:移动支付的巅峰对决
- 微信支付与支付宝钱包的关键性差异
- MD5加密支付宝支付与微信支付
- iOS支付(包括支付宝、微信、银联)封装
- 封装好的Android 微信支付
- 微信支付代码的java封装
- 支付宝支付 微信支付 SDK的集成教程
- 老手是这样教新手编程的
- Codeforces gym 101343 A 数论
- AutoEncoder(自动编码器)
- 前端小白学习笔记
- 内网渗透使用代理访问内网
- 微信支付与支付宝的封装
- 程序命名的一些提示
- 设计模式之装饰器模式
- Httpclient post和get请求
- C++ 线程 共享资源保护
- eclipse出错打不开:Failed to load the JNI shared library
- Java实现链表结构的头插法与尾插法
- 数论基础
- C语言入门——多个数学问题求解