美文网首页
微信支付

微信支付

作者: 程序猿的小生活 | 来源:发表于2018-03-29 17:29 被阅读5次

    目录

    微信支付组件流程说明.............................................................................................. 3

    微信支付组件接入注意事项....................................................................................... 7

    微信组件支付问题说明.............................................................................................. 7

    更新日志

    发布日期版本修订人更新内容

    2017.01.201.0.0李伟初稿完成

    2017.01.201.0.0李伟1.新增微信组件接入流程说明

       2017.01.221.0.0李伟1.完善微信支付组件说明文档

    2017.10.10  1.0.0李伟 1.增加微信支付回调 

    微信支付组件流程说明

    微信支付接入文档网址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

    (1)、后台配置

    商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面,如图8.8红框内所示。

    应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值

    应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串

     

    (2)、注册APPID

    商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID 代码如下:

    /**  * 1.注册APPID  */ private void registerAppid(){  

       msgApi = WXAPIFactory.createWXAPI(this, null);//商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID

       msgApi.registerApp(Constants.APP_ID);// 将该app注册到微信

    }

    (3)调起支付界面

    商户服务器生成支付订单,生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付 代码如下:

    /**  * 2.调起微信支付界面  */ private void genPayReq() {

          LogUtils.i(TAG, "pay order = " + order);

          PayReq req = new PayReq();

          req.appId = Constants.APP_ID;//微信开放平台审核通过的应用APPID

          req.partnerId = Constants.MCH_ID;//微信支付分配的商户号

          req.prepayId = order;//微信返回的支付交易会话ID

          req.packageValue = "Sign=WXPay";//暂填写固定值Sign=WXPay

          req.nonceStr = genNonceStr();//随机字符串,不长于32位。推荐随机数生成算法

          req.timeStamp = String.valueOf(genTimeStamp());//时间戳

          List signParams = new LinkedList();

          signParams.add(new BasicNameValuePair("appid", req.appId));

          signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));

          signParams.add(new BasicNameValuePair("package", req.packageValue));

          signParams.add(new BasicNameValuePair("partnerid", req.partnerId));

          signParams.add(new BasicNameValuePair("prepayid", req.prepayId));

          signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));

          req.sign = genAppSign(signParams);//签名

          msgApi.registerApp(Constants.APP_ID);

          msgApi.sendReq(req);

          finish();

       }

    (4)支付结果回调

    支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。

    代码如下: 

    @Override

    public void onResp(BaseResp resp) {  

    LogUtils.d(TAG, "onPayFinish, errCode = " + resp.errCode); 

    String errCode = String.valueOf(resp.errCode);  

    switch (errCode) { 

    case Constants.PAY_SUCCESS: 

    sendBroadcast(new Intent("com.wx.broadcast.paysuccess")); 

    Toast.makeText(this, getResources().getString(R.string.pay_success), Toast.LENGTH_SHORT).show(); finish(); 

    break; 

    case Constants.PAY_CANCEL: 

    sendBroadcast(new Intent("com.wx.broadcast.cancel")); 

    Toast.makeText(this, getResources().getString(R.string.pay_cancel), Toast.LENGTH_SHORT).show(); finish(); 

    break; 

    case Constants.PAY_FAIL: 

    sendBroadcast(new Intent("com.wx.broadcast.payfail")); 

    Toast.makeText(this, getResources().getString(R.string.pay_fail), Toast.LENGTH_SHORT).show(); finish(); 

    break;  

    default: 

    break; 

    }  

    }

     (5)接入微信支付的项目manifest配置说明

     

     

     

     

     

      (6)增加广播

     

    public class WXPayBroadcastReciver extends BroadcastReceiver {

        EventBus eventBus = EventBus.getDefault();

     public WXPayBroadcastReciver() {}

        @Override

     public void onReceive(Context context, Intent intent) {

            if (intent.getAction().equals("com.wx.broadcast.cancel")) {

                Log.d("wx", " wx pay cancel");

     eventBus.post(new BJMGFSdkEvent(BJMGFSdkEvent.RECHARGE_CANCEL));

     } else if (intent.getAction().equals("com.wx.broadcast.paysuccess")) {

                eventBus.post(new BJMGFSdkEvent(BJMGFSdkEvent.RECHARGE_SUCCESS));

     Log.d("wx", " wx pay success");

     } else if (intent.getAction().equals("com.wx.broadcast.payfail")) {

                eventBus.post(new BJMGFSdkEvent(BJMGFSdkEvent.RECHARGE_FAIL));

     Log.d("wx", " wx pay fail");

     }

        }

    }

     

    附:微信支付回调结果码说明

     

    结果码描述解决方案

    0成功展示成功界面

    -1错误可能原因:签名错误,未注册APPID,项目设置APPID不正确等

    -2用户取消无需处理,用户支付不了,取消支付。

     

    (5)签名打包

    AS中中签名过程如下:Build=>Generate Signed APK界面

    如下图:

    打包成功后将apk放入到E:\GAME_M_Engine_Proxy\sdkres\android\hwy_android\assets目录下,注意apk名称必须为Wxpay.apk

    微信支付组件接入注意事项

    (1)APP打包时签名文件keystore与APP包名必须与微信后台配置的包名和签名文件一致。签名文件目录:E:\cocos2d_3\SDKModulesRepo\android\sources\WechatPayPlugin

    微信组件支付问题说明

    1.调不起支付界面,显示签名错误?

    检查支付组件打包时的签名文件是否正确。

    相关文章

      网友评论

          本文标题:微信支付

          本文链接:https://www.haomeiwen.com/subject/coqvcftx.html