Android微信支付集成,官网避坑


1.首先,需要注册微信开放平台和微信商户平台两个账号。为什么是两个?这不要问我。

         商户平台申请支付

    获取商户号,其它乱七八糟的什么营业执照什么的,老板去填吧



   然后是微信开放平台,注册需要一堆东西,照着填吧,我们需要的是Key和AppId,这一步就没截图了,各个开放平台都大同小异,照着操作就是了


2.下载微信支付的Jar包

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN

https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Android_SDK_3.1.1.zip

导入工程

3.后台申请预支付订单,嗯,后台的事,我们只需要从后台拿预支付订单号就Ok。"prepay_id":"wx2016102912484074a5d2fd4d0707519344"

4.现在从1,2,3步拿到的有

商户平台:商户号parentId

开放平台:appId和appKey

后台:预支付订单:prepayId

5.调用下面的方法

/**
 * 微信支付
 */
private void wechatpay() {

    long currentTimeSeconds = System.currentTimeMillis() / 1000;
    String randomString = RandomString.getRandomString(32);
    String[] strArr = new String[]{
           你的appid, 你的商户号, 你的预支付订单号
            , randomString, "" + currentTimeSeconds, "Sign=WXPay"
    };
    String wechatSign = RandomString.getWechatSign(strArr);

 // 将该app注册到微信 IWXAPI wxapi = WXAPIFactory.createWXAPI(PayOrderActivity.this, null); wxapi.registerApp(你的appid); PayReq req = new PayReq(); req.appId = 你的appid; req.partnerId = 你的商户号;
    req.prepayId = 你的预支付订单号;
req.nonceStr = randomString; req.timeStamp = currentTimeSeconds + ""; req.packageValue = "Sign=WXPay"; req.sign = wechatSign; wxapi.sendReq(req);}
6.所需要的相关方法



import android.util.Log;

import com.tencent.qalsdk.util.MD5;

import java.util.Arrays;
import java.util.Random;

public class RandomString {
    private static String RANDOM_SOURCE="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";


    public static String getRandomString(int length) {
        Random random = new Random();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int i1 = random.nextInt(62);
            stringBuilder.append(RANDOM_SOURCE.charAt(i1));
        }
        String string = stringBuilder.toString();
        return string;
    }

    public static String getWechatSign(String[] strArr) {
        StringBuilder builder = new StringBuilder();
        String[] strarr = new String[6];
        for (int i = 0; i < 6; i++) {
            StringBuilder builder1 = new StringBuilder();
            String key=null;
            switch (i) {
                case 0:
                    key = "appid";
                    break;
                case 1:
                    key = "partnerid";
                    break;
                case 2:
                    key = "prepayid";
                    break;
                case 3:
                    key = "noncestr";
                    break;
                case 4:
                    key = "timestamp";
                    break;
                case 5:
                    key = "package";
                    break;
            }
            builder1.append(key).append("=").append(strArr[i]);
            String param = builder1.toString();
            strarr[i] = param;
        }
        Arrays.sort(strarr);
        for (int i=0;i<6;i++) {
            String s = strarr[i];
            builder.append(s).append("&");
        }

        builder.append("key").append("=").append(你的appkey);
        return MD5.toMD5(builder.toString()).toUpperCase();
    }

}
7.注册回调的Activity,我这里用了一个不显示的Activity来接收支付回调,只是做为发送通知用,这里包名和类名都不能更改的哟,只能使用  

你自己的包名.weapi.WXPayEntryActivity

<!--微信相关-->
<activity android:name=".wxapi.WXPayEntryActivity"
    android:theme="@android:style/Theme.NoDisplay"
    android:exported="true"
    android:screenOrientation="portrait"/>
 <!--微信相关-->


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

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;
import com.xunlebao.leplus.api.Contants;

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{

    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        api = WXAPIFactory.createWXAPI(this, 你的appid);
        api.handleIntent(getIntent(), this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        finish();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {
        Toast.makeText(getApplicationContext(),"onReq",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onResp(BaseResp resp) {

        int code = resp.errCode;

        if (code == 0){
            //显示充值成功的页面和需要的操作
            sendBroadcast(new Intent(Contants.INTENT_WECHAT_SUCCESS).putExtra("type",0));
        }

        if (code == -1){
            //错误
            sendBroadcast(new Intent(Contants.INTENT_WECHAT_SUCCESS).putExtra("type",-1));

        }

        if (code == -2){
            sendBroadcast(new Intent(Contants.INTENT_WECHAT_SUCCESS).putExtra("type",-2));
            //用户取消
        }
    }
}

8.官方文档链接,https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值