android----微信支付

官方文档


1.打包项目获取签名(签名工具)


2.导入微信支付的lib.jar包


3.获得微信公众平台id;

//微信开放平台和商户约定的密钥
private String app_wx_secret_key=”db426a9829e4b49a0dcac7b4162da6b6”;
//微信公众平台商户模块和商户约定的密钥
private String app_wx_parent_key=”8934e7d15453e97507ef794cf7b0519d”;
//微信公众平台商户模块和商户约定的支付密钥
private String app_wx_pay_key=”L8LrMqqeGRxST5reouB0K66CaYAWpqhAVsq7ggKkxHCOastWksvuX1uvmvQclxaHoYd3ElNBrNO2DHnnzgfVG9Qs473M3DTOZug5er46FhuGofumV8H2FVR9qkjSlC5K”;
//商户id
private String app_tx_parent_key = “1900000109”; `


4.清单注册,导入WXPayEntryActivity类

<!--  微信支付-->
        <activity android:name=".wxapi.WXPayEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="设置自己的APP_id" />
            </intent-filter>
        </activity>

5.统一订单

官方文档要去服务后台生成预支付交易单然后由前端从接口中获取
当然如果不怕安全问题可以自己生成(暂时不提供,后期增加)

6.调起支付接口

如果后台给你提供了一个获取统一订单接口的话.您可以直接从接口中获取主要的几个参数和值
 private void requestPay(JSONObject json){
        IWXAPI iwxapi=WXAPIFactory.createWXAPI(this,Constants.App_ID);
        if (!iwxapi.isWXAppInstalled()){
            Toast.makeText(PayActivity.this,"没有安装微信",Toast.LENGTH_SHORT).show();
            return;
        }
        iwxapi.registerApp(Constants.App_ID);
        PayReq resp=new PayReq();
        try {
            JSONObject data=json.getJSONObject("data");
            resp.appId=data.getString("appid");
            resp.partnerId=data.getString("mch_id");
            resp.prepayId=data.getString("prepay_id");
            resp.packageValue="Sign=WXPay";
            resp.nonceStr=data.getString("nonce_str");
            resp.timeStamp=genTimeStamp()+"";


            SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
            parameters.put("appid", data.getString("appid"));
            parameters.put("partnerid", data.getString("mch_id"));
            parameters.put("prepayid",data.getString("prepay_id"));
            parameters.put("noncestr",data.getString("nonce_str"));
            parameters.put("package","Sign=WXPay");
            parameters.put("timestamp",genTimeStamp()+"");//时间生成
            String characterEncoding = "UTF-8";
            String sign = createSign(characterEncoding,parameters);//生成签名 根据上面的参数获取sign 记得排序
            resp.sign=sign;
        }
        catch (Exception e){
            e.printStackTrace();
        }
        iwxapi.sendReq(resp);
    }


/**
     * 生成签名
     * @param characterEncoding
     * @param parameters
     * @return
     */
    public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters){
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
        Iterator it = es.iterator();
        while(it.hasNext()) {
            Map.Entry entry = (Map.Entry)it.next();
            String k = (String)entry.getKey();
            Object v = entry.getValue();
            if(null != v && !"".equals(v)
                    && !"sign".equals(k) && !"key".equals(k)) {
                sb.append(k + "=" + v + "&");
            }
        }
        //商户key
        sb.append("key="+Constants.MCH_API_KEY);
        //大写
        String packageSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();
        return packageSign;
    }


  //时间
    private long genTimeStamp() {
        return System.currentTimeMillis()/1000;
    }

这里写图片描述

根据官方文档要一步一步进行设置.

7.设置回调

WXPayEntryActivity.class中设置
@Override
    public void onResp(BaseResp resp) {
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            //根据获取的resp.errCode值
            //-1 签名错误之类的错误.这就需要自己好好查看自己的代码了
            //0  支付成功
            //-2 取消支付

        }

认真查看官方文档.一个字一个字的看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值