android接入微信支付(真的很简单,几行代码就搞定了)

今天我们来说一下接入微信支付这个鬼,因为这也是我第一次写支付的东西,所以我就来捋一下这个玩意儿,也方便日后忘了还能够看一下。我这篇文章呢是跟后台交互的情况下不是什么东西都集成到APP中的。那么我们接下来就开始扯犊子了哈。。。排好队,仔细听。。.。。。。

比如在微信开放平台申请应用这些我们就不说了啊,最重要得到一点就是你的签名一定是正式打包后的

接下来我们进入主题:先看效果图(如下)支付金额不一样是因为后台还没有给我返订单的金额,这个0.01只是测试而已

                                



下图是官方的解释



首先微信支付暴露给我们的是两步,一步是生成预支付订单,然后那个预支付订单id再去调用微信支付,我们有两种方式可以实现,一种是在客户端中处理这些,另一种就是和后台交互,后台给你返回数据解析,当然在实际开发中我们使用的是第二种的方式

那么我接下来就说第二种的实现方式(与后台交互):

1.把官方的jar包导入libs中,也可以直接在build.gradle文件中,添加如下依赖即可:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
}或者
dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.0.2'
}
(第一个包含统计功能,看你的需求了)

2.添加必要的权限,

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3.在应用中注册微信

public class MyApplicion extends Application {

    public static final String WXAppid = "你的在微信开放平台申请的appid";
    private IWXAPI iwxapi;

    @Override
    public void onCreate() {
        super.onCreate();
        //将微信注册到app中
        iwxapi = WXAPIFactory.createWXAPI(this, WXAppid, true);
        iwxapi.registerApp(WXAppid);
    }
}

4.提交相关的数据到服务器,如果成功的话服务器会给你返回相关的appid等等信息

 /**
     * 提交订单
     *
     * @param user_id       用户id
     * @param user_phone    用户手机
     * @param design_name   设计姓名
     * @param font_id       签名id
     * @param price         价格
     * @param setmeal       套餐  (5 :无套餐  1:套餐一 2:套餐二 3:套餐3 4:套餐4)
     * @param is_flash      是否需要视频教程 (1.需要 2.不需要)
     * @param demeand       要求
     * @param pay_id        支付方式(1.支付宝  2.微信)
     * @param target_data   完成日期
     * @param phone_type    手机类型
     * @param update_number 修改次数
     */
    private void submitOrder(String user_id, String user_phone, String design_name, int font_id, float price, int setmeal,
                             int is_flash, String demeand, int pay_id, String target_data, String phone_type, int update_number) {

			//HttpUrl.submitOrder:他只是一个网址,写在了另一个工具类中   相当于:String submitOrder="你的服务器提交订单网址"
        Request<String> stringRequest = NoHttp.createStringRequest(HttpUrl.submitOrder, RequestMethod.POST);
        stringRequest.add("user_id", user_id);
        stringRequest.add("user_phone", user_phone);
        stringRequest.add("design_name", design_name);
        stringRequest.add("font_id", font_id);
        stringRequest.add("price", price);
        stringRequest.add("setmeal", setmeal);
        stringRequest.add("is_flash", is_flash);
        stringRequest.add("demeand", demeand);
        stringRequest.add("pay_id", pay_id);
        stringRequest.add("target_date", target_data);
        stringRequest.add("phone_type", phone_type);
        stringRequest.add("update_number", update_number);

        RequestQueue queue = NoHttp.newRequestQueue();
        queue.add(1, stringRequest, new SimpleResponseListener<String>() {
            @Override
            public void onSucceed(int what, Response<String> response) {
                Log.d("XYS", response.toString());
                Toast.makeText(PayActivity.this, "上传成功", Toast.LENGTH_SHORT).show();

                String json = response.get();
                if (response.responseCode() == 200) {
			//上传成功后解析服务器返回的商家号签名等等信息
                    try {
                        JSONObject jsonObject = new JSONObject(json);
                        Log.d("xys", json);
                        JSONObject info = jsonObject.getJSONObject("info");
                        String appid = info.getString("appid");
                        String partnerid = info.getString("partnerid");
                        String bag = info.getString("package");
                        String prepayid = info.getString("prepayid");
                        String noncestr = info.getString("noncestr");
                        String timestamp = info.getString("timestamp");
                        String sign = info.getString("sign");
                        wechatPay(appid, partnerid, prepayid, noncestr, timestamp, bag, sign);
                        Log.d("xys", appid + partnerid + prepayid + noncestr + timestamp + bag + sign);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }


            }

            @Override
            public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
                Toast.makeText(PayActivity.this, "上传失败", Toast.LENGTH_SHORT).show();
            }
        });
    }


/**
     * @param appid     微信分配的公众账号ID
     * @param partnerid 微信支付分配的商户号
     * @param prepayid  微信返回的支付 交易会话ID
     * @param noncestr  随机字符串,不长于32位。推荐随机数生成算法 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_3
     * @param timestamp 时间戳,请见接口规则-参数规定 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_2
     * @param packageX  暂填写固定值Sign=WXPay
     * @param sign      签名,详见签名生成算法
     */
    protected void wechatPay(String appid, String partnerid, String prepayid, String noncestr, String timestamp, String packageX, String sign) {
        PayReq req = new PayReq();
        IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, WXAppid);
        req.appId = appid;
        req.partnerId = partnerid;
        req.prepayId = prepayid;
        req.nonceStr = noncestr;
        req.timeStamp = timestamp;
        req.packageValue = packageX;
        req.sign = sign;
        // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
        iwxapi.sendReq(req);
    }

5.在微信支付用的按钮里边调用一下方法

case R.id.pay_wx:
		 //调用提交订单的方法
                 submitOrder("2", "15110027513", name, 1, money, 5, 1, "没要求", 2, "12.23",band + models, 1);
                break;
这就搞定了,根本不需要你懂什么,只需要几行代码就可以搞定,其他的都是后台做的事,跟我们就无关,欢迎借鉴哈



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值