以前自己写过微信支付,今天让我用h5调用微信支付,结果还浪费了点时间,虽然时间不长。
1.导入jar包 。微信提供的jar包
2.写你的微信支付的代码,其实如果参数都有了就一段代码:public void requestWXPay(Context context,OrderModel orderModel) { IWXAPI api= WXAPIFactory.createWXAPI(context,orderModel.getAppid());// boolean isPaySupported =api.getWXAppSupportAPI() >= Bui;// if (!isPaySupported) {// Toast.makeText(context, "你的手机微信不支持支付,请更新微信后重试", Toast.LENGTH_SHORT).show();// } PayReq payReq=new PayReq(); payReq.appId=orderModel.getAppid(); payReq.partnerId=orderModel.getMchid(); payReq.prepayId=orderModel.getPrepayId(); payReq.nonceStr=orderModel.getNonceStr(); payReq.timeStamp=orderModel.getTimestamp(); payReq.packageValue="Sign=WXPay"; payReq.sign=orderModel.getSign(); api.registerApp(orderModel.getAppid()); api.sendReq(payReq); }
这里面orderModel 是你的后台给你的json数据。
3.解析gson的时间的时候要对时间进行特殊的处理:
Gson gson = new GsonBuilder()// 2013-09-14 16:45:29 .setDateFormat("yyyy-MM-dd HH:mm:ss")// .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") .create();
4.写一个你的微信入口
你的应用程序包名.wxapi 里面的activity: 注意:你的清单文件里面的配置要explode 为true,不然你的程序微信不能给你回调package com.chinaCEB.cebActivity.wxapi;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.chinaCEB.cebActivity.R;import com.tencent.mm.sdk.modelbase.BaseReq;import com.tencent.mm.sdk.modelbase.BaseResp;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;import com.tencent.mm.sdk.openapi.WXAPIFactory;public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler { public static IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxpay_entry); if (api==null) { api=WXAPIFactory.createWXAPI(this, "wx52f8500f7f6d98a7"); } api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { int a=baseResp.errCode; }}
5.签名 ,包名等问题:
Android stadiO 调试的时候要设置自己的正规的签名,不然不行。
注意:
如果返回-1 可能是因为签名,可能是你的账单什么的不是最新的。所以人家给你返回-1. -1验证失败不只是因为你的签名。很多原因都可以-1你在微信后台配置的那些参数,就是签名和包名,就是微信校验你可不可以吊起支付的关键。签名就是微信给你的一个工具,然后生成的。做微信支付这个第三方插件这个事情,我做了一件很挫的事情。就是没有在详细设计的时候,消除风险。
项目快做完了,又说什么做不了。好失败的一次。自己想想都不能原谅自己。能不能做不是想当然。还忽略了一个问题,就是你的appid,能不能吊起跟你不同的订单号。 好搓。好搓。当初想第三方支付怎么做的,开始的想法是,人家可以做,我肯定也可以做。后来发现,第三方只是封装了一下,实际上还是不能绕过微信。注意;Android 最好也好注册微信。这样就可以避免微信的缓存问题。微信的缓存问题是指: 同样的包名,你这次调用微信用的是不对的keystore,如果你不清理缓存,下次调用微信的时候,它就不再去服务器查询你的keystore是不是对的,尽管你可能换的是对的。
微信注册也就是:final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null); // 将该app注册到微信 msgApi.registerApp(Constants.APP_ID);
这样就可以避免每次用错了签名,每次都要清理缓存。