Android中微信支付接入的完整教程来了

在讲解微信支付之前,最重要的也是关键的一点就是一定先把签名配置好,否则后面调不起微信支付界面【查看配置签名】 ,当然,如果你已经弄好了,就开始吧!

一.添加gradle依赖

在这里插入图片描述
在app module目录下的build.gralde中添加

dependencies {//微信支付SDKimplementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

gralde构建完成之后,再做下一步的操作

二.在AndroidManifest.xml中添加相关权限

   <!-- 网络请求 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

三.创建wxapi目录,并创建WXPayEntryActivity

有些文件可以直接从官方的demo里拷贝【官网】
在这里插入图片描述

1、在你的工程里面,你需要将demo里面的lib文件的拷贝到你的工程libs里面

在这里插入图片描述

2、在你的包的根目录下,创建wxapi这个package包(命名一定是wxapi,否则后面回调不成),然后再创建WXPayEntryActivity这个类

WXPayEntryActivity实现IWXAPIEventHandler接口,这个Activity页面就是支付结果的回调页面,下面是它最简单地实现:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {private IWXAPI  api;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_w_x_pay_entry);// 1.将app注册到微信端api = WXAPIFactory.createWXAPI(this, Config.APPID);api.handleIntent(getIntent(),this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent,this);}@Overridepublic void onReq(BaseReq baseReq) {}@Overridepublic void onResp(BaseResp baseResp) {// 2.接收传过来的参数PayResp resp = (PayResp) baseResp;String order_id = resp.extData;// 3. 根据状态去做相应的处理if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {switch (baseResp.errCode) {case 0://支付成功paySuccess(order_id); //支付成功页面返回或点击返回商家所做的事情break;case -1://错误,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等Toast.makeText(this, "支付错误", Toast.LENGTH_SHORT).show();break;case -2://用户取消,无需处理。发生场景:用户不支付了,点击取消,返回APP。Toast.makeText(this, "用户取消了订单", Toast.LENGTH_SHORT).show();break;}finish();//这里需要关闭该页面}}/*** 支付成功处理 (api)* @param order_id*/private  void paySuccess(String order_id){//支付成功后要做的事....}
}
3、将demo里面的AppRegister这个广播接受者拷贝到项目里面任意的位置,我还是放在创建的wxapi这个包里面的

在这里插入图片描述

4、别忘了在清单文件注册广播和Activity

在这里插入图片描述

四.使用

当你调用后台接口获取到订单的相关信息后,就可以调用支付接口了,具体代码如下:

 @SuppressLint("HandlerLeak")Handler handler = new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 1:try{JSONObject jo = (JSONObject) msg.obj;if(jo!=null && jo.getInt("code")==1000){JSONObject userInfo = jo.getJSONObject("data");//判断有没有安装微信,没有就做相应提示if(api.isWXAppInstalled()){PayReq req = new PayReq();req.appId = userInfo.getString("appId");req.partnerId = userInfo.getString("partnerId");req.prepayId = userInfo.getString("prepayId");req.packageValue = userInfo.getString("packageValue");req.nonceStr = userInfo.getString("nonceStr");req.timeStamp = userInfo.getString("timeStamp");req.sign = userInfo.getString("sign");req.extData=order_id;api.sendReq(req);}else{Log.i(TAG, "handleMessage: "+"未安装微信,请安装微信支付");Toast.makeText(GoodPayment.this,"未安装微信,请安装微信支付",Toast.LENGTH_SHORT).show();}}else{Log.i(TAG, "handleMessage: "+jo.getString("msg"));Toast.makeText(GoodPayment.this,jo.getString("msg"),Toast.LENGTH_SHORT).show();}}catch (JSONException je){je.printStackTrace();}break;}}};//请求后台接口private void orderPayApp() {try{new Thread(){@Overridepublic void run() {super.run();Map<String,Object> params = new HashMap<>();params.put("order_sn",order_sn);params.put("order_total_amount",amount);params.put("user_token",userToken);//请求后台接口,params是提交的参数(根据你们自己后端提供的接口去调用噢)JSONObject jo = Helper.httpRequestJson("orderPayApp",new JSONObject(params));Message msg = handler.obtainMessage();msg.what=1;msg.obj=jo;handler.sendMessage(msg);}}.start();}catch (Exception e){e.printStackTrace();}}                          

不出意外的话,通过上面的步骤,你就可以正常使用微信提供的APP支付啦。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部