Android 微信支付步骤

以前自己写过微信支付,今天让我用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,不然你的程序微信不能给你回调

<activity android:name=".wxapi.WXPayEntryActivity"
        android:exported="true"
        ></activity>
 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);

这样就可以避免每次用错了签名,每次都要清理缓存。

原文地址:https://www.cnblogs.com/caoxinyu/p/6647841.html