Android가 알리페이와 위챗 결제에 접속

많은 앱이 결제 기능을 필요로 하는데 국내는 일반적으로 알리페이와 위챗이다.현재 이 두 가지 접속 방식은 앱 측에 있어서 모두 비교적 편리하다. 왜냐하면 대부분의 안전 검사와 같은 논리가 서비스 측에 있기 때문이다.
APP를 요약하면 3단계 이동입니다.
1.      

2.          ,          

3.           

알리페이 접속은 우선 알리페이의 aar 파일을 접속하는 것이 비교적 구덩이인 것은 알리페이가 aar 파일을 다운로드해서 가져와야 하는 것이지gradle 안의 한 줄에 의존하면 되는 것이 아니다.
최신 DEMO와 SDK를 다운로드하려면 홈페이지를 방문해야 합니다.https://docs.open.alipay.com/54/104509/
그리고 다운로드한aar백을 프로젝트 디렉터리 아래의libs 디렉터리에 넣고 아래gradle을 통해 의존합니다
//     SDK AAR       
compile(name: 'alipaySdk-15.6.0-20190226104104-noUtdid', ext: 'aar')

알리페이 SDK를 호출하여 결제 시작
알리페이 SDK를 호출하여 결제를 시작하려면 하나의 매개 변수만 있으면 서버에서 돌아오는 주문 정보입니다.그래서 이곳의 지불 순서는 먼저 우리가 서비스 측의 인터페이스를 호출하여 주문서를 만들고 서비스 측이 주문 정보를 우리에게 되돌려주는 것이다. 우리 앱은 이 주문 정보를 가지고 알리페이를 호출한다.
//아래의 orderInfo는 바로 우리 자신의 서버에서 되돌아오는 주문 정보입니다. 그 안에 주문 ID 등을 제외하고 서명 등 안전 정보도 있습니다//사용 방식은 기본적으로 알리페이의 DEMO에 따라 하면 됩니다.
	final Runnable payRunnable = new Runnable() {
     
 @Override
	public void run() {
     
    PayTask alipay = new PayTask(PayDemoActivity.this);
    Map<String, String> result = alipay.payV2(orderInfo, true);
    Log.i("msp", result.toString());
    Message msg = new Message();
    msg.what = SDK_PAY_FLAG;
    msg.obj = result;
    mHandler.sendMessage(msg);
    }
};
	//       
	Thread payThread = new Thread(payRunnable);
	payThread.start();

위의 호출을 통해 알 수 있듯이 알리페이는 메시지 메커니즘을 통해 리셋을 받기 때문에 우리는handler의 메시지에서 리셋 정보를 받아야 한다.
private Handler mHandler = new Handler() {
     
	    @SuppressWarnings("unused")
 	   public void handleMessage(Message msg) {
     
  	      switch (msg.what) {
     
        case SDK_PAY_FLAG: {
     
            //            
            //      ,                  ,               
            break;
        }
        default:
            break;
        }
    };
};

주의해야 할 것은 지불 결과는 반드시 자신의 서비스 업체를 호출하여 확정해야 하며 알리페이의 리셋 결과를 통해 판단할 수 없습니다!
기타
실제 상황에서 사용자의 휴대전화에 알리페이를 설치한 적이 있는지 없는지를 고려해야 한다
이미 알리페이를 설치했으니 알리페이를 직접 호출하고 알리페이를 설치하지 않았다. 알리페이의 H5페이지 결제 이상을 조정하면 알리페이의 접속이다. 절차는 비교적 간단하고 구덩이도 없다.아래의 위챗 결제는 구덩이가 된다..
위챗 결제https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
알리페이에 비해 위챗이 SDK에 접속하는 것은 비교적 간단하다. 한 줄의 코드가 완성되었다
//    SDK
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

여기서 주의해야 할 것은 위챗의 SDK에 결제와 소셜 로그인 등이 통합돼 있어 분리할 수 없다는 점이다.그래서 프로젝트에 위챗 로그인을 통합한 적이 있다면 중복 통합이 필요 없어요!
위챗 SDK를 호출하여 결제 시작
String content = ...    (             )
//           APPID
IWXAPI api = WXAPIFactory.createWXAPI(mContext, APPID);
JSONObject json = new JSONObject(content); 
PayReq req = new PayReq();
req.appId           = json.getString("appid");
req.partnerId       = json.getString("partnerid");
req.prepayId        = json.getString("prepayid");
req.nonceStr        = json.getString("noncestr");
req.timeStamp       = json.getString("timestamp");
req.packageValue    = json.getString("package");
req.sign            = json.getString("sign");
api.sendReq(req); //            

위챗 지불의 반향을 받다
위의 코드를 볼 수 있는 것은 알리페이와 달라서 핸들러를 사용하지 않았다.
위챗 결제가 비교적 특수한 부분은 우리가 특수한Activity로 리셋 정보를 받아야 한다는 것이다.이 처리가 잘 되지 않으면 리셋을 받지 못하는 상황에 직면하기 쉽다.
WXPay Entry Activity라는 Activity를 새로 만들어야 합니다. 내용은 위챗SDK에 참고할 수 있습니다.주의해야 할 사항은 다음과 같습니다.
WXPayEntryActivity  Activity        ,  APP    com.niubi.company,   Activity       		  com.niubi.company.wxapi.WXPayEntryActivity
  WXPayEntryActivity     AndroidManifest     
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

특히 주의해야 할 것은 위의 exported 속성과launchMode 속성은 반드시 추가해야 한다. 그렇지 않으면 리셋을 받을 수 없다
우리는 지불이 끝난 후에 일반적으로 우리 자신의 응용 프로그램으로 직접 돌아가기를 희망한다.이 때 우리는 위의 WXPay Entry Activity를 표시하지 않도록 해야 한다. 그렇지 않으면 이 검은 페이지에 반짝거리거나 머물게 될 것이다.안 보이면 두 가지를 주의해야 한다. 하나는 레이아웃이 없으면 안 되고, 다른 하나는 바로finish에서 이 Activity를 떨어뜨려야 한다.
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
     
    
    ...

    @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(this);-->
            <!--builder.setTitle(R.string.app_tip);-->
            <!--builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));-->
            <!--builder.show();-->
            //           DEMO        ,               
            //    finish     ,     :
            sendPayNotice()
            finish();
        }
    }
}

다른 마찬가지로 위챗 결제의 성공 여부도 자신의 서버를 호출해서 확인해야 하며 위챗의 리셋 상태에 의존해서는 안 된다는 것을 명심해야 한다.

좋은 웹페이지 즐겨찾기