赞
踩
在讲解微信支付之前,最重要的也是关键的一点就是一定先把签名配置好,否则后面调不起微信支付界面【查看配置签名】 ,当然,如果你已经弄好了,就开始吧!
在app module目录下的build.gralde中添加
dependencies {
//微信支付SDK
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
gralde构建完成之后,再做下一步的操作
<!-- 网络请求 -->
<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" />
有些文件可以直接从官方的demo里拷贝【官网】
WXPayEntryActivity实现IWXAPIEventHandler接口,这个Activity页面就是支付结果的回调页面,下面是它最简单地实现:
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; @Override protected 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); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this); } @Override public void onReq(BaseReq baseReq) { } @Override public 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){ //支付成功后要做的事.... } }
当你调用后台接口获取到订单的相关信息后,就可以调用支付接口了,具体代码如下:
@SuppressLint("HandlerLeak") Handler handler = new Handler(){ @Override public 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(){ @Override public 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支付啦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。