Android開發支付集成——微信集成

 支付寶支付傳送門:http://www.javashuo.com/article/p-khojrgst-e.html

2、微信支付

1. 微信支付流程圖

微信支付流程
相比較而言,微信支付是要比支付寶麻煩一些,而且微信的開發文檔我的也感受寫的比較亂,初次接觸會有些懵。php

2. 集成前準備

  1. 註冊、登陸微信開發者平臺
  2. 註冊應用,獲得APPID申請開通微信支付,填寫申請資料
  3. 找到 開發者文檔 下載SDK

3.開始集成

  微信支付能夠直接在app build.gradle中設置html

/*微信支付集成*/
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

  而後在你的包下,這裏要注意如下放在指定包下邊java

  

 

 AndroidManifest.xml配置android

 <!--微信支付,回掉-->
        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop" />

 

 

微信的後臺參數返回,相對於支付寶的返回信息,微信返回信息更加清晰一下,不過沒啥用,一會加密完都一個樣子json

格式化後:api

{
    "msg":"success",
    "code":200,
    "data":{
        "appid":"本身申請的appId",
        "noncestr":"jqEmamoTbMoi0hRP",
        "package":"Sign=WXPay",
        "partnerid":"150****351",
        "prepayid":"wx21144021******fd37e2948041031",
        "sign":"50E345DCF6900A*****10126E7424",
        "timestamp":"1529563221"
    },
    "status":"0"
}

拿到返回參數,微信支付方法微信

 /*微信支付測試OK*/
    private void testWxPay(final String key, final String value) {
        StringRequest stringRequest = new StringRequest(Request.Method.POST, NetWorkUrl.WXPAY, new Response.Listener<String>() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onResponse(String s) {
                Log.e("GoPayOrderActivity", "-------getJson2-------" + s.toString());

                /*判斷code*/
                String code = (JSONObject.parseObject(s.toString()).getString("code"));
                if (code.equals("200")) {
                    String jsonObject = JSONObject.parseObject(s.toString()).getString("data");
                    String appId = JSONObject.parseObject(jsonObject).getString("appid");
                    String sign = JSONObject.parseObject(jsonObject).getString("sign");
                    String packageWx = JSONObject.parseObject(jsonObject).getString("package");
                    String partnerid = JSONObject.parseObject(jsonObject).getString("partnerid");
                    String prepayid = JSONObject.parseObject(jsonObject).getString("prepayid");
                    String noncestr = JSONObject.parseObject(jsonObject).getString("noncestr");
                    String timestamp = JSONObject.parseObject(jsonObject).getString("timestamp");
                    Log.e("GoPayOrderActivity", "onResponse: appId" + appId);
                    Log.e("GoPayOrderActivity", "onResponse: sign" + sign);
                    Log.e("GoPayOrderActivity", "onResponse: package" + packageWx);
                    Log.e("GoPayOrderActivity", "onResponse: partnerid" + partnerid);
                    Log.e("GoPayOrderActivity", "onResponse: prepayid" + prepayid);
                    Log.e("GoPayOrderActivity", "onResponse: noncestr" + noncestr);
                    Log.e("GoPayOrderActivity", "onResponse: timestamp" + timestamp);
                    api = WXAPIFactory.createWXAPI(GoPayOrderActivity.this, appId);

                    PayReq req = new PayReq();
                    //req.appId = "wxf8b4f85f3a794e77";  // 測試用appId
                    //req的參數接受能夠拿取order對象的數據
                    req.appId = appId;
                    req.partnerId = partnerid;
                    req.prepayId = prepayid;
                    req.nonceStr = noncestr;
                    req.timeStamp = timestamp;
                    req.packageValue = packageWx;
                    req.sign = sign;
                    req.extData = "app data"; // optional
                    // 在支付以前,若是應用沒有註冊到微信,應該先調用IWXMsg.registerApp將應用註冊到微信
                    api.sendReq(req);
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        }) {
            @Override
            public Map<String, String> getParams() throws AuthFailureError {
                Log.e("GoPayOrderActivity", "getParams:-----------------> " + userEntity.getPhone());

                Map<String, String> map = new HashMap<String, String>();
                map.put("account", userEntity.getPhone());
                map.put(key, value);
//                map.put("productId", "1");
//                map.put("productId", "1");
                map.put("token", userEntity.getToken());
                return map;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                if (userEntity.getToken().equals("") && userEntity != null) {
                    headers.put("Authorization", userEntity.getToken());
                }
                return headers;
            }

        };
        /*設置請求一次*/
        stringRequest.setRetryPolicy(
                new DefaultRetryPolicy(
                        5000,//默認超時時間,應設置一個稍微大點兒的,例如本處的500000
                        DefaultRetryPolicy.DEFAULT_MAX_RETRIES,//默認最大嘗試次數
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
                )
        );
        AppApplication.getHttpQueues().add(stringRequest);/*請求數據*/
    }

 

微信支付回調微信開發

 WXPayEntryActivity.javaapp

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private static final String TAG = "WXPayEntryActivity";

    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pay_result);

        api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
        api.handleIntent(getIntent(), this);
    }

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

    @Override
    public void onReq(BaseReq req) {
    }


    @Override
    public void onResp(BaseResp resp) {
        Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            AlertDialog.Builder builder = new AlertDialog.Builder(WXPayEntryActivity.this);
            /*註釋掉的能夠成功*/
            builder.setTitle(R.string.app_tip);
            builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
            builder.show();
            int code = resp.errCode;
            switch (code) {
                case 0:
                    MobclickAgent.onEvent(WXPayEntryActivity.this, "payment_success", "付款成功");
//                    finish();
//                    Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
                    /*跳轉個人會員頁面*/
                    AppApplication.addActivity(WXPayEntryActivity.this);
                    Intent intent = new Intent(this, MyVipActivity.class);
                    startActivity(intent);
                    break;
                case -1:
                    MobclickAgent.onEvent(WXPayEntryActivity.this, "payment_fali", "付款失敗");
//                    失敗緣由 可能的緣由:簽名錯誤、未註冊APPID、項目設置APPID不正確、註冊的APPID與設置的不匹配,其餘異常等
                    Toast.makeText(this, "支付失敗", Toast.LENGTH_SHORT).show();
                    finish();
                    break;
                case -2:
                    Toast.makeText(this, "支付取消", Toast.LENGTH_SHORT).show();
                    finish();
                    break;
                default:
                    Toast.makeText(this, "支付取消", Toast.LENGTH_SHORT).show();
                    finish();
                    break;
            }

        }

    }
}

 

完成上述,微信支付也是能夠完成的了,注意測試的時候要用Release包,測試包是調用不起來微信的ide

若是問題或建議請發送到個人郵箱:dingchao7323@qq.com

相關文章
相關標籤/搜索